2012-12-26 25 views
32

我有一个按钮,我希望它有不同的背景,当我设置:国家列表绘制和禁用状态

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> 

但按钮仍正常当它被禁用时的背景。 我错过了什么?

+2

尝试在第一项一款Android添加:state_enabled =“真” –

+0

按下虚假不按。另外,不指定状态也不意味着错误。这意味着它不被考虑。所以,你的规则在这里意味着任何时候一个按钮没有按下,它有正常的BG。 – njzk2

+0

您必须删除最后一项的** android:state_enabled =“true”**,这样所有其他状态将具有** @ drawable/bttn_orange_normal **。一旦你的按钮变成了双色,它就会在正确的位置得到** @ drawable/bttn_grey_disabled **。此外,您必须删除具有** android:state_pressed =“false”**的行,因为它会覆盖*** android:state_enabled =“false”的定义*** – alexscmar

回答

97

把这一行:<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> 
+14

这是为什么!?疯狂愚蠢的规则:/ – Estel

+1

为什么它工作?无论如何感谢 – Orr

+1

这是什么?因为什么原因..一路上它适用于我.. –

16

文森特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>