我有这个颜色的资源文件
<resources>
<color name="CLR_BLUE">#00f</color>
<color name="CLR_RED">#f00</color>
<color name="CLR_GREEN">#0f0</color>
<color name="CLR_YELLOW">#ff0</color>
<color name="CLR_BLUE_DARK">#00a</color>
<color name="CLR_RED_DARK">#a00</color>
<color name="CLR_GREEN_DARK">#0a0</color>
<color name="CLR_YELLOW_DARK">#aa0</color>
</resources>
当用户点击四个彩色Buttons
private void changeBackground(Button pressedBtn)
{
int oldColor = 0;
int newColor = 0;
if(pressedBtn == greenBtn) {
oldColor = R.color.CLR_GREEN;
newColor = R.color.CLR_GREEN_DARK;
}
else if (pressedBtn == redBtn) {
oldColor = R.color.CLR_RED;
newColor = R.color.CLR_RED_DARK;
}
else if (pressedBtn == yellowBtn) {
oldColor = R.color.CLR_YELLOW;
newColor = R.color.CLR_YELLOW_DARK;
}
else if (pressedBtn == blueBtn) {
oldColor = R.color.CLR_BLUE;
newColor = R.color.CLR_BLUE_DARK;
}
else return;
pressedBtn.setBackgroundResource(newColor);
SystemClock.sleep(500);
pressedBtn.setBackgroundResource(oldColor);
}
问题是按下时按钮的颜色不会改变。
我踩了一个调试器,它实际上到达了方法中的正确点,所以这不是问题。我认为问题出在pressedBtn.setBackgroundResource(newColor)
,但我无法理解为什么。
PS:无论如何,如果你有一个更好的解决方案,在按下时改变按钮颜色,半秒后,改回原来的颜色,请告诉我。
答案 0 :(得分:17)
我们尝试使用Android中的普通按钮来实现类似标签的功能。我没有成功使用XML获得正确的行为 - 必须做错事。例如,只要按下按钮,我就可以将按钮颜色变为黄色,但是当它离开时它会恢复原始颜色。
最后,通过在每个标签按钮的click事件处理程序中使用以下代码,我可以实现所需的行为。希望这可以帮助有类似问题的人。
// Get Handle for the Tab buttons
Button btnTab1 = (Button) findViewById(R.id.button_tab1);
Button btnTab2 = (Button) findViewById(R.id.button_tab1);
// set the colors correctly
btnTab1.setBackgroundResource(color.lightblue);
btnTab2.setBackgroundResource(color.darkblue);
答案 1 :(得分:11)
您可以使用下面的xml文件来创建按钮的状态。
有关可用属性的信息是here. 您只需将此xml文件复制到项目中的drawables文件夹,将其命名为custom_button.xml,并使用
在布局中引用它。 android:background="@drawable/custom_button"
这是xml文件......
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" >
<shape android:shape="rectangle">
<solid
android:color="#00ff00" />
<stroke
android:width="5dp"
android:color="#ff0000"
android:dashWidth="3dp"
android:dashGap="2dp" />
</shape>
</item>
<item android:state_focused="true" >
<shape>
<gradient
android:endColor="#ffffff"
android:centerColor="#ffffff"
android:startColor="#ffffff"
android:angle="270" />
<stroke
android:width="3dp"
android:color="#00ff00" />
<corners
android:radius="5dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
<item>
<shape>
<gradient
android:endColor="#ffffff"
android:centerColor="#ffffff"
android:startColor="#ffffff"
android:angle="270" />
<stroke
android:width="5dp"
android:color="#00ff00" />
<corners
android:radius="5dp" />
</shape>
</item>
答案 2 :(得分:4)
setBackgroundResource期待一种抽奖,而不是一种颜色。你想要setBackgroundColor。
此外,您的颜色应至少有6位数字,#RBGGBB
即,蓝色:#0000FF
我认为你拥有的东西可能等同于#00000F,它接近于黑色......
最后,你永远不应该睡在UI线程中(或者更改UI线程中没有的UI项)。有关使用其他线程的多种不同方法,请参阅Painless Threading。我认为postDelayed可能就是你要找的东西。