【问题标题】:How to change color of the Button after clicking it? [duplicate]单击按钮后如何更改按钮的颜色? [复制]
【发布时间】:2021-02-23 07:40:38
【问题描述】:

我已经动态创建了按钮。我只想更改我单击的按钮的背景颜色。例如,最初所有按钮都应具有灰色背景色。如果我单击了一个按钮,则单击的按钮背景颜色应更改为红色,其他按钮背景颜色应为灰色。

这里我试了一下

for (int i = 0; i < 5; i++) {
 Button myBtn = new Button(ProductDetailsActivity.this);
 myBtn.setText("My Button"+i);
 myBtn.setBackGroundColor(Color.parseColor("#cccccc"));
 myBtn.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View view) {
        myBtn.setBackGroundColor(Color.parseColor("#ff0000"));
     }
});
}

【问题讨论】:

    标签: java android xml


    【解决方案1】:

    您的代码似乎合法。 但不是

    myBtn.setBackGroundColor(Color.parseColor("#ff0000"));
    

    你可以使用

    myBtn.setBackGroundColor(Color.RED);
    

    我认为您想根据单击的按钮动态更改所有按钮的颜色。并且想把别人变成灰色。

    因此,要实现这一点,您需要将按钮保存在数组中。然后通过达到其他索引,您可以修改它们。您可以从 buttonText String 的末尾获取索引并将其解析为整数。

        Button[] buttonArray = new Button[4];
    
        for (int i = 0; i < 5; i++) {
     Button myBtn = new Button(ProductDetailsActivity.this);
     myBtn.setText("My Button"+i);
     myBtn.setBackGroundColor(Color.GREY);
     myBtn.setId(new Random().nextInt());
     myBtn.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View view) {
    
              for(int j=0; j<buttonArray.lenght;j++){
                  if(view.getId() == buttonArray[j].getId()){
                       buttonArray[j].setBackgroundColor(Color.RED);
                    }else{
                       buttonArray[j].setBackgroundColor(Color.GREY);
                    }
                 }
         }
    });
     buttonArray[i]=myBtn;
    }
    

    所以主要思想是将所有按钮保存在一个数组中。如果其中一个被点击,则获取那个人的索引,使其背景为红色。并将其他按钮(不是那个索引)的背景再次变为灰色。

    【讨论】:

    • 它不起作用.....在 int redButtonIndex = Integer.parseInt(text.getText(text.getText().length()-1,text.getText().length( )));
    • 你能输入错误吗?
    • 我更正了代码。如果你使用 myBtn.getText.subString。错误会消失
    • 我的应用程序崩溃了...
    • 你能支持我的问题吗?