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>
<?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>
iStateListDrawable对应的XML根元素是<selector>,它能够根据View的状态的不一样匹配展现不一样的Drawable。好比点击时背景是红色,不点击时时白色,因此StateListDrawable鲳鱼点击事件的背景。3d
<?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>
子节点要关心只有 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 | 应用程序是否在前台,当有通知栏被拉下来或者一个对话框弹出的时候应用程序就不在前台了 |
一、item能够用多个,item里面放的是Drawable
二、系统查找顺序是顺着item从上到下知道找到就中止往下寻找。
这里的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图像资源抽象类
本篇完
相关参考