1. 程式人生 > >Android爬坑-selector 背景不顯示

Android爬坑-selector 背景不顯示

今天在使用selector設定view的背景的時候,本來是想獲得焦點的時候是一個背景,按鈕被按下的時候是另外一個背景,正常情況下呢又是另外一個背景。

剛開始的寫法是這樣的
[html] view plain copy
在CODE上檢視程式碼片派生到我的程式碼片

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

    <item android:drawable="@drawable/media_play_view_focus_" android:state_selected="true"/>  
    <item android:drawable="@drawable/media_play_view_focus_" android:state_focused="true"/>  
    <item android:drawable="@drawable/media_play_view_press_" android:state_pressed="true"/>  
<span style="white-space:pre">    </span><item android:drawable="@drawable/media_play_view_bg_"/>  
</selector>  

雖然我在第三個item上添加了按下是的背景圖片,但是並沒有生效,後來查了下,原因是:

需要注意selector中 item 的順序:一旦前面的一個 item 已經滿足匹配的狀態,後面的 item 就不會去執行了

我的按下的操作滿足了第二條item(因為只有上焦點了才能點選),按照上面的說法,不會執行第三條item了。

於是,我這樣改造了一下:

[html] view plain copy
在CODE上檢視程式碼片派生到我的程式碼片

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

    <item android:drawable="@drawable/media_play_view_focus_" android:state_selected="true"/>  
    <item android:drawable="@drawable/media_play_view_press_" android:state_focused="true" android:state_pressed="true" />  
    <item android:drawable="@drawable/media_play_view_focus_" android:state_focused="true"/>  
    <item android:drawable="@drawable/media_play_view_bg_"/>  

</selector>  

把press狀態提前了,並且設定了焦點屬性也是true(因為當點選的時候,即有焦點事件又有press事件)。這樣設定之後效果就出來了。

這樣看來,selector中的item的順序是有玄機的。。。。

參考文章:

寫selector的xml檔案時,需注意item的順序,不帶狀態的item放在最後,否則selector無效

Android中的Selector的用法

android selector item 順序