一、selector介绍:
存放位置:res/drawable/文件的名称.xml
1 使用场景:控件不同状态显示不同的样式,这时候就用到selector
2 item: 每个item表示一种状态(可以几种状态叠加使用)
3 匹配规则:第一个匹配的状态将会使用,如果第一个没有任何状态则会一直加载第一个,所以默认状态要放到最后
4 几种常见状态说明
1)android:state_pressed : boolean。“true”表示按下状态使用(例如按钮按下);“false”表示非按下状态使用。
2)android:state_focusedboolean。“true”表示聚焦状态使用(例如使用滚动球/d-pad聚焦button);“false”表示非聚焦状态使用。
3)android:state_selected : boolean。“true”表示选中状态使用(例如tab打开);“false”表示非选中状态使用。
4) boolean。“true”表示可勾选状态时使用;“false”表示非可勾选状态使用。(只对能切换可勾选—非可勾选的构件有用。)
5) boolean。“true”表示勾选状态使用;“false”表示非勾选状态使用。
6) boolean。“true”表示可用状态使用(能接收触摸/点击事件);“false”表示不可用状态使用。
7) android:window_focused
boolean。“true”表示应用程序窗口有焦点时使用(应用程序在前台);“false”表示无焦点时使用(例如notification栏拉下或对话框显示)。
二、例子: 1)listView状态改变 2)button状态改变
1、 listView 中加载方法 android:listSelector="@drawable/list_item_bg"
或者在listview的item中添加属性android:background=“@drawable/list_item_bg"即可实现,或者在java代码中使用:Drawable drawable = getResources().getDrawable(R.drawable.list_item_bg);
list_item_bg.xml 代码,按照上面的添加上样式即可
<?xml version="1.0" encoding="utf-8" ?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 没有焦点时的背景图片--> <item android:state_window_focused="false" android:drawable="@color/red" /> <!-- 非触摸模式下获得焦点并单击时的背景图片--> <item android:state_focused="true" android:state_pressed="true" android:drawable="@color/blue" /> <!-- 触摸模式下单击时的背景图片--> <item android:state_focused="false" android:state_pressed="true" android:drawable="@color/green" /> <!--选中时的图片背景--> <item android:state_selected="true" android:drawable="@color/pink" /> <!--获得焦点时的图片背景--> <item android:state_focused="true" android:drawable="@color/black" /> <!-- 默认时的背景图片android:drawable可以是图片也可以是颜色 --> <item android:drawable="@color/white"/> </selector>
2、按钮的selector
1)普通的样式即不同的状态给予不同的,简单的背景样式
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@color/red" />
<item android:state_focused="true" android:drawable="@color/green" />
<item android:state_pressed="true" android:drawable="@color/blue" />
<item android:drawable="@color/pink" />
</selector>
2)不同的状态item下,添加自定义的shape背景样式,(添加渐变、描边、填充色,圆角处理,padding距离处理等),自定义的shap在下面会具体的学习
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <!-- 定义当button 处于pressed 状态时的形态。--> <shape> <gradient android:startColor="#8600ff" /> <stroke android:width="2dp" android:color="#000000" /> <corners android:radius="5dp" /> <padding android:left="10dp" android:top="10dp" android:bottom="10dp" android:right="10dp" /> </shape> </item> <item android:state_focused="true"> <!-- 定义当button获得focus时的形态--> <shape> <gradient android:startColor="#eac100" /> <stroke android:width="2dp" android:color="#333333" /> <corners android:radius="8dp" /> <padding android:left="10dp" android:top="10dp" android:bottom="10dp" android:right="10dp" /> </shape> </item> <item> <shape> <solid android:color="@color/white"/> <stroke android:width="2dp" android:color="@color/pink" /> <corners android:topRightRadius="5dp" android:bottomLeftRadius="5dp" android:topLeftRadius="0dp" android:bottomRightRadius="0dp" /> </shape> </item> </selector>
三、Shape的使用
简介
作用:XML中定义的几何形状
位置:res/drawable/文件的名称.xml
使用的方法:
Java代码中:R.drawable.文件的名称
XML中:Android:background="@drawable/文件的名称"
属性:
<shape> Android:shape=["rectangle" | "oval" | "line" | "ring"]
其中rectagle矩形,oval椭圆,line水平直线,ring环形
<shape>中子节点的常用属性:
<gradient> 渐变
Android:startColor
起始颜色
Android:endColor
结束颜色
Android:angle
渐变角度,0从左到右,90表示从下到上,数值为45的整数倍,默认为0;
Android:type
渐变的样式 liner线性渐变 radial环形渐变 sweep
<solid > 填充
Android:color
填充的颜色
<stroke >描边
Android:width
描边的宽度
Android:color
描边的颜色
Android:dashWidth
表示'-'横线的宽度
Android:dashGap
表示'-'横线之间的距离
<corners >圆角
Android:radius
圆角的半径 值越大角越圆
Android:topRightRadius
右上圆角半径
Android:bottomLeftRadius
右下圆角角半径
Android:topLeftRadius
左上圆角半径
Android:bottomRightRadius
左下圆角半径
<padding >填充
android:bottom="1.0dip"
底部填充
android:left="1.0dip"
左边填充
android:right="1.0dip"
右边填充
android:top="0.0dip"
上面填充