Android 圖片Drawable類型之State List

狀態列表圖形,根據不同的狀態呈現不同的顯示效果,如點擊Button時,不同狀態下顯示不同的背景圖片,這是我們常用的一種Drawable類型

語法:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android"
        android:constantSize=["true" | "false"]
        android:dither=["true" | "false"]
        android:variablePadding=["true" | "false"] >
        <item
            android:drawable="@[package:]drawable/drawable_resource"
            android:state_pressed=["true" | "false"]
            android:state_focused=["true" | "false"]
            android:state_hovered=["true" | "false"]
            android:state_selected=["true" | "false"]
            android:state_checkable=["true" | "false"]
            android:state_checked=["true" | "false"]
            android:state_enabled=["true" | "false"]
            android:state_activated=["true" | "false"]
            android:state_window_focused=["true" | "false"] />
    </selector>
  • state_pressed:手指是否按壓在當前View上
  • state_focused:是否獲得了焦點
  • state_hovered:鼠標指針是否移動到了該View上,Android4.0之後的新特性(手機支持OTG功能的同學可以插個鼠標試一試)
  • state_selected:是否被選中,和focused和pressed有一定區別,比如ListView中的條目通過方向鍵移動後被選中時,會觸發selected,而不會觸發focused和pressed
  • state_checkable:是否可以選擇,針對有選中效果的控件,如CheckBox、RadioButton等
  • state_enabled:是否可接受觸摸或點擊等事件
  • state_activated:控件是否被激活,這個一般用於持久保持某個狀態,和selected等按下後改變狀態鬆開後返回之前狀態的方式不同,activated會持久保持這個改變,也就是說當View被按下後改變了狀態鬆開後還是會保持按下時的狀態,除非當前View不在激活狀態時纔會返回之前的狀態,適用於需要獲取兩個或兩個以上焦點的控件,如ListView,GridView等
  • state_window_focused:應用程序是否在前臺,如有對話框或者下拉狀態欄遮住了則表示不在前臺

(1)實現選擇後改變背景的效果
在drawable文件夾下新建一個xml文件寫入以下內容,使用時直接以背景的方式加入到控件中
注意:selector中item的順序需要合理放置,系統會從上往下匹配,如果查找到的item符合當前的狀態,則不會再繼續向下查找其它item,所以默認的item狀態要放在最後,寫程序的時候留意一下

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

這裏寫圖片描述

(2)state_activated的使用
網上對state_activated的講解都看的雲裏霧裏的,決定還是自己實踐一下,發現該狀態類型只有在ListView、GridView等控件上纔有效果
舉個例子,這裏以ListView爲例,我們如果使用上面的方法,設置item的背景後,顯示的效果是這樣的
這裏寫圖片描述

很明顯,當我們鬆開手指後,item的顏色又變成之前的狀態了,如果我們需要鬆開手指後依然保持改變後的狀態,就可以使用state_activated

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

這裏寫圖片描述
注意:需要設置ListView的choiceMode=”singleChoice”

效果出來了,當我們需要實現類似的效果時就可以使用以上方法,其實這個和NavigationView中item的點擊效果是類似的

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