按钮不会改变背景点击
我有三个Buttons
。我希望按钮在点击时改变颜色,然后如果再次点击按钮,它会回到默认颜色。按钮不会改变背景点击
问题:如果我点击第一个,它会改变颜色。但是,如果我点击第二个,它不会改变颜色。但是如果我再次点击第二个Button
,它会最终改变颜色。有谁知道为什么第二个Button
不会在第一次点击时改变颜色?
注:调试后,我注意到is_clicked
设置为1后,我点击第一个Button
。所以当我点击第二个Button
时,它认为它已经改变了颜色并将其设置回默认值。有谁知道我可以如何正确设置is_clicked
标志?或者还有什么我应该做的?
int is_clicked = 0;
public void ButtonOnClick(View v) {
switch (v.getId()) {
case R.id.button1:
if (is_clicked == 1){
button_list.get(0).getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0x00000000));;
is_clicked--;
break;
}
if (is_clicked == 0){
button_list.get(0).getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0xFF00FF00));
is_clicked++;
break;
}
break;
case R.id.button2:
if (is_clicked == 1){
button_list.get(1).getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0x00000000));;
is_clicked--;
break;
}
if (is_clicked == 0){
button_list.get(1).getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0xFF00FF00));
is_clicked++;
break;
}
break;
case R.id.button3:
if (is_clicked == 1){
button_list.get(2).getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0x00000000));;
is_clicked--;
break;
}
if (is_clicked == 0){
button_list.get(2).getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0xFF00FF00));
is_clicked++;
break;
}
break;
}
}
虽然我同意佩德拉姆....根据您的要求,您在xml中使用标签。
将这个标签中的每个按钮
android:tag="0"
如果
String clicked= (String)btn1.getTag();
If ("0".equals(clicked)) {
//set a color for your button
button1.setTag("1");
} else {
//set a color for your button
button1.setTag("0");
}
它只是一个简单的按钮
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/normal" android:state_enabled="true" android:state_focused="true"/>
<item android:drawable="@drawable/pressed" android:state_enabled="true" android:state_pressed="true"/>
<item android:drawable="@android:color/white"/>
</selector>
将此设为您的按钮的背景
编辑:最后一个是默认的,也有更多的国家也一样,选择禁用,尝试与他们一起玩,你可以通过选择器做出很多功能。
这是一个不错的按钮。与中风和禁用状态。
<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" >
<shape>
<solid
android:color="#00aeef" />
<stroke
android:width="1dp"
android:color="#0090bf" />
<corners
android:radius="6dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
<!-- #ef4444 #992f2f -->
</item>
<item android:state_enabled="false">
<shape>
<solid
android:color="#174574"/>
<stroke
android:width="1dp"
android:color="#12375D" />
<corners
android:radius="6dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
<!-- Default -->
<item>
<shape>
<gradient
android:startColor="#3399FF"
android:endColor="#2E8AE6"
android:angle="270" />
<stroke
android:width="1dp"
android:color="#297CCF" />
<corners
android:radius="6dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
</selector>
对不起,我对这个有点新。我添加了哪个文件夹/文件?我是否可以绘制新的XML文件?或者我在创建按钮的layour xml中添加它? – user2456977 2014-11-06 18:17:38
@ user2456977将它放在您的可绘制文件夹中,如果您还没有创建一个新文件夹,并且还要删除所有开关大小写代码,它只能通过XML工作。 – Pedram 2014-11-06 18:22:16
自从英德拉用我现在的代码回答它之后,我不得不选择英德拉的答案。不过,我可能会按照你的建议改变我的代码。但我至少给了你一个赞成:)非常感谢! – user2456977 2014-11-06 18:28:15
然后有三个INT is_clicked喜欢btn1_clicked,btn2_clicked,btn3_clicked – 2014-11-06 17:51:08
HM,好建议。但是在我的程序中,我实际上有50个按钮。所以我希望我可以为所有情况使用一个is_clicked。我简单地将它缩短为三个按钮,这个例子和简单... – user2456977 2014-11-06 17:53:14
它是一种不好的做法,设置这样的颜色,为什么你不用'Selector',你可以通过2或3行代码 – Pedram 2014-11-06 18:05:07