我只想从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
,然后再返回其灰色答案 0 :(得分:0)
我终于找到了解决方案!这篇文章帮助我找到了它:https://stackoverflow.com/a/8748112/8952749
现在我基本上有两个按钮,其中一次只能选择一个按钮。为此,我创建了一个selector-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;
}
}
});