安卓Selector失效、無用的解決方案

在開發安卓的時候經常會用到selector來爲button自動設置背景,selector中有多種item,每個item可以定義一種狀態,同時設置這種狀態所要顯示的圖片。

但是在使用的selector中存在多種狀態的時候,可能遇到滿足這種狀態但是圖片“沒有改變的情況”

比如這個selector:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/num_5" android:state_pressed="false" />
    <item android:drawable="@drawable/num_5_pressed" android:state_pressed="true" />
 <item android:drawable="@drawable/num_5_disable" android:state_enabled="false" />
</selector>

selector實現在三種對應狀態下顯示的內容。

在運行的時候,點擊(state_pressed="true")和不點擊(state_pressed="false")button時,button的背景都是沒有問題的,在代碼中設置button不可用(button.setEnable(false))卻不能顯示對應的圖片@drawable/num_5_disable;

其實原因很簡單,selector中的item判斷是從上到下的。當爲button等設置selector之後,button顯示出來就處於未點擊狀態(state_pressed="false"),此時選擇對應圖片顯示。當在代碼中設置button不可用的時候,selector開始從上往下判斷,首先遇到滿足條件的是依然是未點擊狀態,也就依然選擇了未點擊狀態的圖片而停止繼續判斷。可以看到一個按鈕要麼點擊要麼未點擊,永遠也不可能顯示不可用狀態對應的圖片。

這裏如果要實現不可用狀態對應圖片的顯示,就應當將第三個item前調,放在第一個位置:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/num_5_disable" android:state_enabled="false" />
    <item android:drawable="@drawable/num_5" android:state_pressed="false" />
    <item android:drawable="@drawable/num_5_pressed" android:state_pressed="true" />
</selector>
這樣就可以顯示上面所有的狀態了。其他情況一樣,調整對應item的順序就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章