我有几个ImageButtons,我试图强制其中一个像CheckBox一样。当用户按下按钮时,我想要在“按下”(橙色,如点击并按住)和“正常”状态之间切换按钮的背景。怎么样?下面的代码并没有真正做到这一点。
public void btnErase_click(View v) {
ImageButton btnErase = (ImageButton) findViewById(R.id.btnErase);
if (pressed == true)
btnErase.setBackgroundColor(Color.YELLOW);
else
btnErase.setBackgroundColor(android.R.drawable.btn_default);
}
答案 0 :(得分:1)
您应该在setBackgroundResource
子句中使用setBackgroundCOlor
代替else
。因为android.R.drawable.btn_defaul
不是颜色,所以它是资源的id。
答案 1 :(得分:1)
您可以尝试这样做,通过xml设置不同的状态,将其保存在drawable中,然后将其设置为按钮的背景:
<item android:state_pressed="true"><shape>
<solid android:color="#3c3c3c" />
<stroke android:width="0.5dp" android:color="#3399cc" />
<corners android:bottomLeftRadius="0dp" android:bottomRightRadius="0dp" android:topLeftRadius="4dp" android:topRightRadius="4dp" />
<padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
</shape></item>
<item><shape>
<gradient android:angle="270" android:endColor="#171717" android:startColor="#505050" />
<stroke android:width="0.5dp" android:color="#3399cc" />
<corners android:bottomLeftRadius="0dp" android:bottomRightRadius="0dp" android:topLeftRadius="4dp" android:topRightRadius="4dp" />
<padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
</shape></item>
答案 2 :(得分:1)
首先,提供选择器。将其另存为drawable / button_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_checked="true" android:drawable="@android:color/yellow" />
<item drawable="@android:drawable/btn_default" />
</selector>
将其作为背景应用于您的按钮。 在代码中
public void btnErase_click(View v) {
ImageButton btnErase = (ImageButton) findViewById(R.id.btnErase);
if (pressed) {
btnErase.getBackground().setState(new int[]{android.R.attr.state_selected});
} else {
btnErase.getBackground().setState(new int[]{-android.R.attr.state_selected});
}
}
但我认为这不是一个好主意。如果您的按钮有两种状态,请更好地使用ToggleButton。
答案 3 :(得分:1)
您应该使用传入的View v
,而无需再次找到ImageButton。
另外,如果您将按钮背景设置为图像,请使用setBackgroundResource
代替setBackgroundColor
public void btnErase_click(View v) {
ImageButton btnErase = (ImageButton) v;
if (pressed == true)
btnErase.setBackgroundColor(Color.YELLOW);
else
btnErase.setBackgroundResource(android.R.drawable.btn_default);
}