【原創】Android selector選擇器無效或無法正常顯示的一點研究


想將LinearLayout作為一個按鈕,加上一個動態背景,按下的時候,背景變色,這個理所當然應該使用selector背景選擇器來做:

  <LinearLayout
                    android:id="@+id/btn_user_profit_record"
                    android:layout_width="0dp"
                    android:layout_height="130dp"
                    android:layout_weight="1"
                    android:background="@drawable/bg_selector"
                    android:gravity="center"
                    android:orientation="vertical">
 </LinearLayout>

 

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/white"/>
    <item android:drawable="@color/white_dark" android:state_pressed="true"/>
</selector>

這樣寫了之后,死活都沒有效果,一直都不變色,多方嘗試之后發現,有人寫的類似的selector是將上面一行設置為stat_pressed="false",我嘗試了一下,果然有效了

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

更深一層的思考,為什么會這樣?設置一個默認的狀態,應該是可行的,不需要這樣全部都指明,由此想到是不是與順序有關,作為一個selector,可能是按照順序來對照判斷的,那么每次狀態改變要判斷的時候,肯定都滿足第一個(因為什么條件都沒有),所以其他的都不會生效,因此我做了這樣的修改:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/white_dark" android:state_pressed="true"/>
    <item android:drawable="@color/white"/>
</selector>

將默認狀態移到最下面,果然能正常生效了,這也證明了我剛才的想法是正確的。

 

倒是確實沒有想到selector里的項目還會有順序(沒怎么仔細看官方文檔,我的鍋),看來以后對於比較復雜的selector怎么排序應該要仔細一點了。

 

另外之前網上搜索的時候看到有人指出,對於layout要指定clickable="true",才“激活”選擇器生效,我這邊也順便試了下,貌似沒設置這個屬性也沒什么關系,一樣生效了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM