繁体   English   中英

更改按钮数组中按钮的颜色并将其他按钮恢复为默认值

[英]Changing color of a button in an array of buttons and return the other buttons to default

@Override
public void onClick(View v) {
    switch(v.getId()) {
        case R.id.btnA:
            runOnUiThread(new Thread(new Runnable() {
                @Override
                public void run() {
                    btnA.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.button_pressed));
                    btnB.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.colorPrimary));
                    btnC.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.colorPrimary));
                    btnD.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.colorPrimary));
                }
            }));
            break;
        case R.id.btnB:
            runOnUiThread(new Thread(new Runnable() {
                @Override
                public void run() {
                    btnB.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.button_pressed));
                    btnA.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.colorPrimary));
                    btnC.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.colorPrimary));
                    btnD.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.colorPrimary));                
                }
            }));
            break;
 }

所以我目前正在像这样实现我的代码,可以很好地完成工作,但是我有6个按钮,所以我必须这样做6次。 我已经阅读了有关按钮数组的内容,并尝试实现它,但是无法使其工作。 对我来说不清楚的是,我怎么知道我单击了哪个按钮并将其更改为另一种颜色,而另一个未单击的按钮又恢复为其默认颜色。

编辑:
抱歉,如果我不清楚,则此按钮用于多项选择。 这些按钮在创建时已设置为默认值。 如果我依次单击另一个按钮,则不使用switch语句会使两个按钮具有相同的颜色,它们将具有相同的颜色。 这更多是显示问题。

无需switch语句。 只需将所有按钮设置为默认颜色,然后将所选按钮设置为所选颜色。

考虑将测试移到setBackgroundColor调用中,并将其全部保存在一个new Runnable

@Override
public void onClick(View v) {
  runOnUiThread(new Thread(new Runnable() {
    @Override
    public void run() {
      btnA.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), (v.getId() == R.id.btnA ? R.color.button_pressed : R.color.colorPrimary));
      btnB.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), (v.getId() == R.id.btnB ? R.color.button_pressed : R.color.colorPrimary));
      ...

我想FredK的意思是这样的:

    @Override
    public void onClick(View v) {
        runOnUiThread(new Thread(new Runnable() {
            @Override
            public void run() {
                // Reset all buttons
                btnA.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.colorPrimary));
                btnB.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.colorPrimary));
                btnC.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.colorPrimary));
                btnD.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.colorPrimary));
                .
                .
                .
                btnZ.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.colorPrimary));

                // Set only the clicked button
                v.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.button_pressed));
            }
        }));
    }

更新:

您还可以遍历ViewGroup,因此您无需手动写下每个Button。

    ViewGroup viewGroup = (ViewGroup) v.getParent();
    for(int i=0;i<viewGroup.getChildCount();i++){
        Object child = viewGroup.getChildAt(i);
        if(child instanceof Button){
            ((Button) child).setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.colorPrimary));
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM