我有一个按钮,我希望它在设置时具有不同的背景:
android:enabled="false"
这是背景资源文件:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="false"
android:drawable="@drawable/bttn_orange_normal" /> <!-- pressed -->
<item android:state_pressed="true"
android:drawable="@drawable/bttn_orange_selected" /> <!-- focused -->
<item android:state_enabled="false" android:drawable="@drawable/bttn_grey_disabled"/>
<item android:state_enabled="true" android:drawable="@drawable/bttn_orange_normal"/>
</selector>
但禁用时按钮仍然具有正常背景。 我错过了什么?
答案 0 :(得分:129)
把这一行:
<item android:state_enabled="false" android:drawable="@drawable/bttn_grey_disabled"/>
作为第一项(必须是第一项,否则无效)selector
代码。
决赛:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:drawable="@drawable/bttn_grey_disabled"/>
<item android:state_pressed="false"
android:drawable="@drawable/bttn_orange_normal" /> <!-- pressed -->
<item android:state_pressed="true"
android:drawable="@drawable/bttn_orange_selected" /> <!-- focused -->
<item android:state_enabled="true" android:drawable="@drawable/bttn_orange_normal"/> <!-- idle state -->
</selector>
答案 1 :(得分:27)
Vincent Ducastel的回答是正确的,但它没有描述为什么解决方案有效。
当Android遍历可用项列表时,它会从上到下遍历列表,在每种情况下评估视图的当前状态是否与为每个项定义的状态匹配。然后选择匹配条件的第一个项目并忽略其余项目。
这就是为什么你应该总是在列表底部提供一个默认项目,并提供一种显示复杂选择条件的方法。例如,如果要在禁用项目时具有特殊按下状态,则应定义以下项目:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
...
<item android:state_enabled="false" android:state_pressed="false" android:drawable="@drawable/btn_grey_disabled"/>
<item android:state_enabled="false" android:state_pressed="true" android:drawable="@drawable/btn_white_disabled_selected"/>
...
</selector>
答案 2 :(得分:0)
添加了活动,默认和禁用状态
的示例reset