Android:StateListDrawable 资源
StateListDrawable 用于组织多个 Drawable 对象。当使用 StateListDrawable 合为目标组件的背景、前景图片时,StateListDrawable 对象所显示的 Drawable 对象会随目标组件状态的改变面自动切换。
一、使用简介
其XML文件根元素为 <selector>,它可以包含多个 <item> 元素。可以指定以下属性:
- android:color 指定颜色
- android:drawable 指定Drawable对象
- android:state_xxx 指定一个特定状态
语法格式如下:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<!--指定特定状态下的颜色-->
<item android:color="hex_color" android:state_pressed=["true"|"false"] />
</selector>
item所支持的状态如下:
android:state_active 是否被激活
android:state_checkable 组件是否能被check。如:RadioButton是可以被check的。
android:state_checked 用户选中了View,一般用于CheckBox这种非黑即白的选项
android:state_enabled 当前View处于可用的状态
android:state_first是 否处于开始状态
android:state_focused 当前View获取了焦点
android:state_last 是否处于结束状态
android:state_middle 是否处于中间状态
android:state_pressed 按下的状态,(按下但是还没松开)
android:state_selected 用户选择了当前View
android:state_hovered 光标是否悬停,通常与focused state相同,它是4.0的新特性
android:state_window_focused 应用程序是否在前台,当有通知栏被拉下来或者一个对话框弹出的时候应用程序就不在前台了
二、实例:
1.与ripple涟漪的配合使用
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<ripple android:color="@color/white" android:radius="1000dp">
<item android:drawable="@mipmap/ico_ripple" />
</ripple>
</item>
<item android:state_focused="true" android:drawable="@mipmap/ico_ripple"/>
<item android:drawable="@mipmap/ico_ripple" android:state_selected="true" />
<item android:drawable="@mipmap/ico_ripple"/>
</selector>
2.点击变换颜色
<?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>
3.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>
4.Edittext输入框
<?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>
在 UI 中使用
<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"/>