Drawable子類之——StateListDrawable (選擇器)

Drawable子類之——StateListDrawable (選擇器)

https://www.jianshu.com/p/7257ce82c762php

本文出自 「阿敏其人」 簡書博客,轉載或引用請註明出處。android

StateListDrawable對應的XML根元素是<selector>,它能夠根據View的狀態的不一樣匹配展現不一樣的Drawable。好比點擊時背景是紅色,不點擊時時白色,因此StateListDrawable鯧魚點擊事件的背景。spa

咱們經常給按鈕的按下的時候設定一個特殊的背景,大概以下.net

<?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> 

1、語法

<?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> 

2、子節點

iStateListDrawable對應的XML根元素是<selector>,它能夠根據View的狀態的不一樣匹配展現不一樣的Drawable。好比點擊時背景是紅色,不點擊時時白色,因此StateListDrawable鯧魚點擊事件的背景。3d

1、語法

<?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> 

2、子節點

子節點要關心只有 selector裏面的屬性和item裏面的狀態。
每個item表示一個Drawable,item裏面放什麼怎麼主要關係不大,咱們關注的只有item的狀態。code

  • android:constantSize
    StateListDrawable的大小是否隨着View的狀態的改變而改變。true固定大小,不隨之改變,false爲隨着改變拉伸自身大小。
    默認爲false。
    .
    .xml

  • android:dither
    是否開啓抖動,開。
    .
    .blog

  • android:variablePadding
    默認false,建議false
    是否隨着View的狀態的改變而改變padding,若是爲true,padding的狀態會隨着改變,若是爲false,那麼就採用item內部的Drawable自身設定的padding的值。事件

  • 主要關心item裏面的Drawable的狀態斷定ip

狀態 含義
android:state_pressed 按下的狀態,(按下可是還沒鬆開)
android:state_focused 當前View獲取了焦點
android:state_selected 用戶選擇了當前View
android:state_checked 用戶選中了View,通常用於CheckBox這種非黑即白的選項
android:state_enabled 當前View處於可用的狀態
android:state_hovered 光標是否懸停,一般與focused state相同,它是4.0的新特性
android:state_checkable 組件是否能被check。如:RadioButton是能夠被check的。
android:state_activated 是否被激活
android:state_window_focused 應用程序是否在前臺,當有通知欄被拉下來或者一個對話框彈出的時候應用程序就不在前臺了

3、特色

一、item能夠用多個,item裏面放的是Drawable
二、系統查找順序是順着item從上到下知道找到就中止往下尋找。

4、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> 
 
圓形的點擊顏色變化.gif

.
.
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的焦點變化.gif

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"/> 
 
下劃線.gif

瞭解更多的Drawable分類 Drawable圖像資源抽象類
本篇完


相關參考

Android之drawable state各個屬性詳解

做者:阿敏其人 連接:https://www.jianshu.com/p/7257ce82c762 來源:簡書 著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。
相關文章
相關標籤/搜索