![](/img/trans.png)
[英]How to programmatically change the value of the android: tint property in <bitmap xml
[英]change tint of button programmatically
我只是想从Java代码内部更改普通按钮的backgroundTint
。 我尝试了许多不同的方法,例如ColorStateList或setColorFilter,但没有任何效果。 我故意不使用setBackgroundColor
因为我想保持按钮的原始形状。
此外,我要使用的颜色已经在我的资源中定义。 经过大量的试验和错误之后,我设法通过以下代码访问了这些颜色:
int colorBtnDeactivated = ContextCompat.getColor(this, R.color.colorBtnDeactivated);
因此,基本上我只需要这一行Java代码即可使我能够访问背景色。 其余的我自己做。
非常感谢您的帮助,我已经在这个问题上停留了几个小时。 谢谢!
编辑:使用选择器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
,然后又恢复为灰色 我终于找到了解决方案! 这篇文章帮助我找到了它: 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;
}
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.