Как программно установить цвет фона для кнопки в макете таблицы?

Я делаю игру Tic Tac Toe. И я использовал кнопки для крестиков-ноликов и динамически устанавливал макет таблицы. Проблема в том, что я не могу установить свойство фона кнопки. Мой код здесь.

TableLayout table = (TableLayout) findViewById(R.id.tableLayout1);
    table.removeAllViewsInLayout();

    int id = 0;

    for (int f = 0; f < board_size; f++) {
        TableRow tr = new TableRow(this);
        for (int c = 0; c < board_size; c++) {
            Button b = new Button(this);
            b.setId(id);
            b.setTextSize(15.0f);

       //below code assign color to whole table background
            //b.setBackground(Color.WHITE); 
            b.setOnClickListener(this);
            id++;
            tr.addView(b, screenWidth / board_size, screenWidth / board_size);
        }
        table.addView(tr);
    }

Пожалуйста, помогите мне. Заранее спасибо.


person Abhay Koradiya    schedule 03.04.2017    source источник


Ответы (4)


R.color.red — это идентификатор (который также является целым числом), но не является цветом.

Вместо этого используйте один из следующих вариантов:

// If you're in an activity:
Button.setBackgroundColor(getResources().getColor(R.color.red));
// OR, if you're not: 
Button.setBackgroundColor(Button.getContext().getResources().getColor(R.color.red));

Или, альтернативно:

Button.setBackgroundColor(Color.RED); // From android.graphics.Color

Или, для более профессиональных навыков:

Button.setBackgroundColor(0xFFFF0000); // 0xAARRGGBB
person Vlad Ivchenko    schedule 03.04.2017

Вы не даете LayoutParams своей вновь созданной кнопке. Добавь это:

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
            LayoutParams.WRAP_CONTENT);
b.setLayoutParams(params);
person RonTLV    schedule 03.04.2017
comment
Я не могу, потому что я использую ширину экрана и высоту экрана, чтобы установить размер. - person Abhay Koradiya; 03.04.2017
comment
Я считаю, что вы должны. Так же, как при добавлении кнопки в XML, вы должны указать LayoutParams. - person RonTLV; 03.04.2017

Попробуйте b.setBackgroundColor(Color.Green);

установить ширину кнопки

b.setLayoutParams (новый LinearLayout.LayoutParams (10, 100));

person Vijay Ankith    schedule 03.04.2017
comment
не может отображать только цвет кнопки. Он показывает цвет фона всей таблицы зеленым. - person Abhay Koradiya; 03.04.2017
comment
может быть, ширина вашей кнопки установлена ​​​​в соответствии с родительской, поэтому, если вы уменьшите ширину, вы найдете разницу - person Vijay Ankith; 03.04.2017

Просто позвони:

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams( 
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(5, 5, 5, 5);
b.setLayoutParams(params);
b.setBackgroundColor(Color.GREEN); // From android.graphics.Color
person rafsanahmad007    schedule 03.04.2017
comment
ваша кнопка добавлена ​​в таблицу? - person rafsanahmad007; 03.04.2017
comment
пожалуйста, ответьте другим способом, если это возможно. - person Abhay Koradiya; 05.04.2017