本文出自 “阿敏其人” 簡書博客追城,轉載或引用請注明出處。
StateListDrawable對應的XML根元素是<selector>失乾,它可以根據(jù)View的狀態(tài)的不同匹配展示不同的Drawable。比如點擊時背景是紅色,不點擊時時白色峭判,所以StateListDrawable鯧魚點擊事件的背景。
我們常常給按鈕的按下的時候設定一個特殊的背景棕叫,大概如下
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@color/little_gray"></item>
<item android:state_focused="true" android:drawable="@color/little_gray"></item>
<item android:drawable="@color/big_bg_color"></item>
</selector>
一林螃、語法
<?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>
二、子節(jié)點
iStateListDrawable對應的XML根元素是<selector>俺泣,它可以根據(jù)View的狀態(tài)的不同匹配展示不同的Drawable疗认。比如點擊時背景是紅色,不點擊時時白色伏钠,所以StateListDrawable鯧魚點擊事件的背景横漏。
一、語法
<?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>
二熟掂、子節(jié)點
子節(jié)點要關心只有 selector里面的屬性和item里面的狀態(tài)缎浇。
每一個item表示一個Drawable,item里面放什么怎么主要關系不大赴肚,我們關注的只有item的狀態(tài)素跺。
android:constantSize
StateListDrawable的大小是否隨著View的狀態(tài)的改變而改變。true固定大小誉券,不隨之改變指厌,false為隨著改變拉伸自身大小。
默認為false踊跟。
.
.android:dither
是否開啟抖動踩验,開。
.
.android:variablePadding
默認false琴锭,建議false
是否隨著View的狀態(tài)的改變而改變padding晰甚,如果為true,padding的狀態(tài)會隨著改變决帖,如果為false厕九,那么就采用item內(nèi)部的Drawable自身設定的padding的值。主要關心item里面的Drawable的狀態(tài)判定
狀態(tài) | 含義 |
---|---|
android:state_pressed | 按下的狀態(tài)地回,(按下但是還沒松開) |
android:state_focused | 當前View獲取了焦點 |
android:state_selected | 用戶選擇了當前View |
android:state_checked | 用戶選中了View扁远,一般用于CheckBox這種非黑即白的選項 |
android:state_enabled | 當前View處于可用的狀態(tài) |
android:state_hovered | 光標是否懸停俊鱼,通常與focused state相同,它是4.0的新特性 |
android:state_checkable | 組件是否能被check畅买。如:RadioButton是可以被check的并闲。 |
android:state_activated | 是否被激活 |
android:state_window_focused | 應用程序是否在前臺,當有通知欄被拉下來或者一個對話框彈出的時候應用程序就不在前臺了 |
三谷羞、特點
1帝火、item可以用多個,item里面放的是Drawable
2湃缎、系統(tǒng)查找順序是順著item從上到下知道找到就停止往下尋找犀填。
四、Demo演示
這里的demo我們在 Drawable子類之—— Drawable子類之—— ShapeDrawable (圖形定義)使用過嗓违。
圓形的點擊變換顏色
<?xml version="1.0" encoding="utf-8"?>
<!--別看這里我們使用的是ovrl(橢圓) 九巡,但是我們得到可是 圓形 的點擊效果-->
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" >
<shape android:shape="oval">
<solid
android:color="#ff0000" />
<stroke
android:width="4dp"
android:color="#294736" />
</shape>
</item>
<item >
<shape android:shape="oval">
<solid
android:color="#848374" />
<stroke
android:width="4dp"
android:color="#745863" />
</shape>
</item>
</selector>
.
.
Edittext的背景框和焦點變化
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_window_focused="false">
<shape android:shape="rectangle">
<solid
android:color="#FFFFFFFF"/>
<corners
android:radius="3dp"/>
<padding
android:left="10dp"
android:right="10dp"/>
<stroke
android:width="1dp"
android:color="#BDC7D8"/>
</shape>
</item>
<item android:state_focused="true" >
<shape android:shape="rectangle" >
<solid
android:color="#FFFFFFFF"/>
<corners
android:radius="3dp"/>
<padding
android:left="10dp"
android:right="10dp"/>
<stroke
android:width="1dp"
android:color="#728ea3"/>
</shape>
</item>
</selector>
Edittext輸入框
selector_edittext_line
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" >
<shape android:shape="rectangle">
<corners android:radius="10dp" />
<solid android:color="@color/deep_orange" />
</shape>
</item>
<item >
<shape android:shape="rectangle">
<corners android:radius="10dp" />
<solid android:color="@color/orange" />
</shape>
</item>
</selector>
使用
<EditText
android:id="@+id/username"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_gravity="center_horizontal"
android:background="@null"
android:drawableBottom="@drawable/selector_edittext_line"
android:hint="@string/user_name"
android:paddingLeft="10dip"
android:singleLine="true"
android:textColor="#000"
android:textSize="18sp"/>
了解更多的Drawable分類 Drawable圖像資源抽象類
本篇完
相關參考