如何更改以编程方式添加的按钮的颜色?

时间:2015-08-07 12:43:09

标签: android user-interface button

我最近开始为Android制作象棋游戏。我需要的第一件事就是制作8乘8的电路板。我想添加64个按钮并在XML中组织它们效率不高,所以我找到了一种使用简单的8x8按钮矩阵以编程方式创建它们的方法。在此之前,一切都按预期工作,我有这个: enter image description here

我接下来尝试的是改变按钮的颜色以匹配棋盘。在互联网上,我找到了一些方法,但几乎所有这些都只是让我的按钮看不见,并没有改变它们的颜色。 enter image description here

这是onCreate方法(到目前为止我唯一修改过的方法):

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_menu);

    //GETTING SCREEN DIMENSIONS
    Display display = getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    int width = size.x;
    int height = size.y;

    //SETTING THE BOARD
    int TILESIZE = width/8;
    LinearLayout back = (LinearLayout) findViewById(R.id.back);
    LinearLayout[] rows = new LinearLayout[8];
    Button[][] tiles = new Button[8][8];

    for(int i = 0; i < 8; i++){
        rows[i] = new LinearLayout(this);
        back.addView(rows[i]);
        for(int j = 0; j < 8; j++){
            tiles[i][j] = new Button(this);
            tiles[i][j].setWidth(TILESIZE);
            tiles[i][j].setHeight(tiles[i][j].getWidth());
            if((i + j) % 2 == 0){

                tiles[i][j].setBackgroundColor(0xFFFFFFFF);
                tiles[i][j].invalidate();
            }
            else{
                //TODO: Make tiles black
            }
            rows[i].addView(tiles[i][j]);
        }
    }
}

XML文件包含一个名为back的垂直线性布局。

我的问题是如何让按钮改变颜色,我在哪里做错了什么。我也很乐意接受替代(或更好)的方法来制作董事会。

2 个答案:

答案 0 :(得分:0)

像这样改变你的循环并尝试

 for(int i = 0; i < 8; i++){
        rows[i] = new LinearLayout(this);
        for(int j = 0; j < 8; j++){
            tiles[i][j] = new Button(this);
            tiles[i][j].setWidth(TILESIZE);
            tiles[i][j].setHeight(tiles[i][j].getWidth());
            if((i + j) % 2 == 0){

                tiles[i][j].setBackgroundColor(0xFFFFFFFF);
                tiles[i][j].invalidate();
            }
            else{
                //TODO: Make tiles black
            }
            rows[i].addView(tiles[i][j]);
        }

      back.addView(rows[i]);
    }

答案 1 :(得分:0)

像这样更改if循环:

if((i + j) % 2 == 0)
    tiles[i][j].setBackgroundColor(android.R.color.holo_blue_dark);

else
    tiles[i][j].setBackgroundColor(android.R.color.holo_red_dark);    

您可以在black文件中定义whitecolor.xml颜色,然后使用tiles[i][j].setBackgroundColor(getResources().getColor(R.color.white));添加颜色,类似地添加黑色。 但请确保您使用不同的背景,以便清晰可见。