【发布时间】: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,但随后又变回灰色
【问题讨论】:
-
我试过了,但更改 PorterDuff.Mode 从未显示出预期的结果。我会再试一次并发布我的代码。