Android selector的實例詳解
Android selector的詳解
前言:
StateListDrawable 是一種通過XML文件來定義的drawable,使用幾個不同的圖片來呈現(xiàn)同一個圖形,通過object的狀態(tài)來實現(xiàn)切換。例如,一個Button有幾個不同的狀態(tài)(按壓,獲取焦點等等),這種情況下,通過使用 state list drawable,你就可以實現(xiàn)在不同的狀態(tài)下使用不同的背景圖片。
你可以在一個XML文件中描述state list。通過在根節(jié)點selector下定義一個item元素來添加每個圖形。每一各item中使用不同的狀態(tài)屬性來定義不用的drawable。
當(dāng)每一次狀態(tài)改變的時候,state list都會從上到下被遍歷一遍,第一個與當(dāng)前state相匹配的item將會被使用—- 這個選擇并不是作出“最匹配”結(jié)果,而是簡單的找到第一個匹配的狀態(tài)。
selector一般都是用來作為有狀態(tài)改變的View的背景,以此來達到當(dāng)用戶對View進行操作,導(dǎo)致View狀態(tài)改變時,作出改變,讓用戶感知View的狀態(tài)變化。
官方說明
文件位置:res/drawable/filename.xml
編譯資源類型:StateListDrawable
資源引用:
In Java: R.drawable.filename
In XML: @[package:]drawable/filename
語法:
<?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>
更多詳細說明,請查閱xsoftlab
實際使用
下面做一個簡單的實例,對Button的背景根據(jù)狀態(tài)做一下處理
XML文件
selector_ts.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/pink" android:state_pressed="true" /> <item android:drawable="@color/yellow" android:state_selected="true" /> <item android:drawable="@drawable/shaperect" android:state_enabled="false" /> <item android:drawable="@color/stone" android:state_enabled="true" /> </selector>
主布局文件(activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="vertical"
android:padding="10dp"
tools:context="mraz.com.tabdemo.MainActivity">
<Button
android:id="@+id/bt_content"
android:layout_width="match_parent"
android:layout_height="300dp"
android:background="@drawable/selector_ts" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:orientation="horizontal">
<Button
android:id="@+id/bt_selected"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Select"
android:textAllCaps="false" />
<Button
android:id="@+id/bt_disable"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Disable"
android:textAllCaps="false" />
<Button
android:id="@+id/bt_pressed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Press"
android:textAllCaps="false" />
</LinearLayout>
</LinearLayout>
代碼部分 比較簡單,這里就不占用過多的篇幅了,看下簡單的效果,大家應(yīng)該就知道如何編寫小小的Activity了。
實際效果

如有疑問請留言或者到本站社區(qū)交流討論,本站關(guān)于Android 開發(fā)的文章還有很多,歡迎大家搜索查閱,謝謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
Android仿抖音右滑清屏左滑列表功能的實現(xiàn)代碼
這篇文章主要介紹了Android仿抖音右滑清屏左滑列表功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06
Android6.0 Launcher2應(yīng)用解析
這篇文章主要為大家詳細介紹了Android6.0 Launcher2應(yīng)用,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-09-09
Android學(xué)習(xí)之BottomSheetDialog組件的使用
BottomSheetDialog是底部操作控件,可在屏幕底部創(chuàng)建一個支持滑動關(guān)閉視圖。本文將通過示例詳細講解它的使用,感興趣的小伙伴可以了解一下2022-06-06
解析Android開發(fā)優(yōu)化之:從代碼角度進行優(yōu)化的技巧
下面我們就從幾個方面來了解Android開發(fā)過程中的代碼優(yōu)化,需要的朋友參考下2013-05-05
Android開發(fā)之在xml中設(shè)置自定義屬性的方法
下面小編就為大家分享一篇Android開發(fā)之在xml中設(shè)置自定義屬性的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01

