14

我正在尝试将禁用状态添加到我现有的 statelist drawable 中,但它不起作用。

最初,我有这个代码:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/store_item_background_selected" android:state_selected="true"/>
<item android:drawable="@drawable/store_item_background"/>
</selector>

它适用于选中和未选中。

现在我想像这样添加 android:state_enabled="false" :

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/store_item_background_selected" android:state_selected="true"/>
<item android:drawable="@drawable/store_item_background" android:state_enabled="true"/>
<item android:drawable="@drawable/store_item_background_disabled"/>
</selector>

并且它永远不会切换到禁用的图像。

有任何想法吗?

编辑

我添加setEnabled(false)到视图的构造函数中,我正在设置这个 statelist drwable,现在我看到了禁用的图像,但是一旦我将视图设置为启用,它就不会再次切换到禁用状态。

4

2 回答 2

42

尽管这是一个非常古老的问题,但应该按以下顺序编写选择器:

  1. 禁用状态优先
  2. 按下状态第二
  3. 最后正常状态
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="@android:integer/config_shortAnimTime">
    <item android:drawable="@color/due_gray" android:state_enabled="false" />
    <item android:drawable="@color/whizdm_primary_dark_color" android:state_pressed="true" />
    <item android:drawable="@color/whizdm_primary_color" />
</selector>
于 2015-09-04T08:58:31.383 回答
9

试试这个

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:drawable="@drawable/store_item_background_selected" android:state_enabled="true" android:state_selected="true"/>
<item android:drawable="@drawable/store_item_background" android:state_enabled="true"/>
<item android:drawable="@drawable/store_item_background_disabled" android:state_enabled="false"/>

</selector>
于 2012-09-12T07:44:31.623 回答