【问题标题】:change tint of button programmatically以编程方式更改按钮的色调
【发布时间】:2017-11-16 16:16:07
【问题描述】:

我只是想从 java 代码中更改普通按钮的backgroundTint。我尝试了许多不同的方法,例如 ColorStateList 或 setColorFilter,但没有任何效果。我故意不使用setBackgroundColor,因为我想保持按钮的原始形状。

此外,我想使用的颜色已经在我的资源中定义。经过大量试验和错误后,我设法使用以下代码访问这些颜色:

int colorBtnDeactivated = ContextCompat.getColor(this, R.color.colorBtnDeactivated);

所以基本上我只需要这行 java 代码就可以访问背景色调。剩下的我可以自己做。

非常感谢您的帮助,我已经被这个问题困扰了好几个小时了。谢谢!

编辑: 使用 selector-xlm 不起作用,因为它只是在按下按钮时改变了按钮的颜色。按钮也会相互影响,所以通过按下一个按钮,我需要能够更改另一个按钮的背景色调。

编辑 2:我再次尝试使用 setColorFilter

//this is all inside the onCreate-method

int colorBtnActiveTest= ContextCompat.getColor(this, colorBtnActive);
int colorBtnDeactivatedTest=ContextCompat.getColor(this, colorBtnDeactivated);

Button btnKnockOne = (Button)findViewById(R.id.btnKnockOne);
boolean stateBtnKnockOne = false;
btnKnockOne.getBackground().setColorFilter(colorBtnDeactivatedTest, PorterDuff.Mode.SRC_IN);

btnKnockOne.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (stateBtnKnockOne==false){
                    btnKnockOne.getBackground().setColorFilter(colorBtnActiveTest, PorterDuff.Mode.SRC_IN);
                    stateBtnKnockOne=true;
                }

                else if (stateBtnKnockOne==true){
                    btnKnockOne.getBackground().setColorFilter(colorBtnDeactivatedTest, PorterDuff.Mode.SRC_IN);
                    stateBtnKnockOne=false;
                }
            }
        });

这是结果:

  • 当我打开活动时,按钮显示为默认的灰色按钮颜色,而不是我的自定义颜色colorBtnDeactivatedTest
  • 当我按下按钮时,它的颜色会短暂地变为colorBtnActiveTest,但随后又变回灰色

【问题讨论】:

标签: java android button


【解决方案1】:

我终于找到了解决办法!这个帖子帮我找到了:https://stackoverflow.com/a/8748112/8952749

现在我基本上有两个按钮,一次只能选择一个。为此,我创建了一个选择器-xlm:

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:state_selected="true"
        android:drawable="@drawable/button_active" />
    <item
        android:state_selected="false"
        android:drawable="@drawable/button_deactivated" />

</selector>

这是 java 代码,它使我能够更改按钮的state_selected

    stateBtn1=false;
    stateBtn2=false;

    btnTest1=(Button)findViewById(R.id.button);
    btnTest2=(Button)findViewById(R.id.button2);

    btnTest1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (stateBtn1==false){
                btnTest1.setSelected(true);
                stateBtn1=true;

                btnTest2.setSelected(false);
                stateBtn2=false;
            }
            else if (stateBtn1==true){
                btnTest1.setSelected(false);
                stateBtn1=false;
            }
        }
    });

    btnTest2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (stateBtn2==false){
                btnTest2.setSelected(true);
                stateBtn2=true;

                btnTest1.setSelected(false);
                stateBtn1=false;
            }
            else if (stateBtn2==true){
                btnTest2.setSelected(false);
                stateBtn2=false;
            }
        }
    });

【讨论】:

    猜你喜欢
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 2023-03-23
    相关资源
    最近更新 更多