一、图片状态选选择器
一)、创建xml文件:
在drawable/xxx.xml下常见xml文件,在同目录下记得要放相关图片<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 默认时的背景图片-->
<item android:drawable="@drawable/pic1" />
<!-- 没有焦点时的背景图片 -->
<item android:state_window_focused="false"
android:drawable="@drawable/pic1" />
<!-- 非触摸模式下获得焦点并单击时的背景图片 -->
<item android:state_focused="true" android:state_pressed="true" android:drawable= "@drawable/pic2" />
<!-- 触摸模式下单击时的背景图片-->
<item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/pic3" />
<!--选中时的图片背景-->
<item android:state_selected="true" android:drawable="@drawable/pic4" />
<!--获得焦点时的图片背景-->
<item android:state_focused="true" android:drawable="@drawable/pic5" />
</selector>
二)使用xml文件:
1、使用方法:
1)方法一:
(1)在listview中配置android:listSelector="@drawable/xxx
(2)在listview的item中添加属性android:background="@drawable/xxx"
2)方法二:
Drawable drawable = getResources().getDrawable(R.drawable.xxx);
ListView.setSelector(drawable);
但是这样会出现列表有时候为黑的情况,需要加上:
android:cacheColorHint="@android:color/transparent"使其透明。
2、相关属性:
android:state_selected :是选中
android:state_focused :是获得焦点
android:state_pressed :是点击
android:state_enabled :是设置是否响应事件,指所有事件
根据这些状态同样可以设置button的selector效果。也可以设置selector改变button中的文字状态。
3、Button文字效果
1)以下是配置button中的文字效果:
drawable/button_font.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:color="#FFF" />
<item android:state_focused="true" android:color="#FFF" />
<item android:state_pressed="true" android:color="#FFF" />
<item android:color="#000" />
</selector>
2)Button还可以实现更复杂的效果,例如渐变
drawable/button_color.xml
<?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" color="#ffffff"/>
<corners android:radius="8dp" />
<padding android:left="10dp" android:top="10dp"
android:bottom="10dp" android:right="10dp"/>
</shape>
</item>
</selector>
3)最后,需要在包含 button的xml文件里添加两项。
例如main.xml 文件,需要在<Button />里加两项
android:focusable="true"
android:background="@drawable/button_color"
二、颜色状态选择器
三)语法示例:
1、文件位置:res/color/filename.xml,文件名被做资源的ID
2、语法示例
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:color="@color/white" />
<item android:state_focused="true" android:color="@color/white" />
<item android:state_pressed="true" android:color="@color/white" />
<item android:state_enabled="true" android:color="@color/black"/>
<item android:state_enabled="false" android:color="@color/white"/>
<item android:state_window_focused="false" android:color="@color/black"/>
<item android:color="@color/black" />
</selector>
3、属性
android:color:十六进制颜色,必须的。颜色是用RGB值来指定的,并且可选择alpha通道。
这个值始终是用#字符开头,后面跟的是Appha-Red-Green-Blue信息,格式如下:
#RGB
#ARGB
#RRGGBB
#AARRGGBB
android:state_pressed:一个布尔值
如果这个项目是在对象被按下时使用,那么就要设置为true。(如,按钮被触摸或点击时。)false应该用于默认的非按下状态。
android:state_focused:一个布尔值
如果这个项目是在对象获取焦点时使用,那么就要设置为true。如,一个选项标签被打开时。
如果这个项目要用于对象没有被被选择的时候,那么就要设置为false。
android:state_checkable:一个布尔值
如果这个项目要用于对象的可选择状态,那么就要设置为true。
如果这个项目要用于不可选状态,那么就要设置为false。(它只用于一个对象在可选和不可选之间的转换)。
android:state_checked:一个布尔值
如果这个项目要用于对象被勾选的时候,那么就要设置为true。否者设为false。
android:state_enabled:一个布尔值
如果这个项目要用于对象可用状态(接受触摸或点击事件的能力),那么就要设置为true,否者设置为false。
android:state_window_focused:一个布尔值
如果这个项目要用于应用程序窗口的有焦点状态(应用程序是在前台),那么就要设置为true,否者设置false。
4、注意
A:要记住,状态列表中一个与对象当前状态匹配的项目会被使用。因此,如果列表中的第一项没有包含以上任何一种状态属性,那么每次都会使用这个项目,因此默认设置应该始终被放到最后。
B:如果出现失去焦点,背景色延迟的情况,不要使用magin。
C:drawable下的selector可是设置状态背景列表(可以让view的背景在不同状态时变化)说明:也可以定义状态背景列表,但是是定义在drawable文件夹下,用的不是color属性,而是drawable属性。
四)自定义选择器
(shape和选择器如何同时使用。例如:如何让一个按钮即是圆角的,又能在点击的时候出现颜色变化。)
1、定义xml文件,Root Element选择shape
①创建view被按下的布局文件:
进行相应的属性配置,如:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<!-- 此处表示是一个矩形 -->
<corners android:radius="3dp" />
<!-- 此处表示是一个圆角 -->
<solid android:color="#33000000" />
</shape>
②创建view正常显示的布局(新建一个xml同),配置如下:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<!-- 此处表示是一个矩形 -->
<corners android:radius="3dp" />
<!-- 此处表示是一个圆角 -->
<solid android:color="#00000000" />
</shape>
2、创建背景选择器:(Root Element为selector)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/bg_pressed" android:state_pressed="true"/>
<!-- pressed -->
<item android:drawable="@drawable/bg_pressed" android:state_focused="true"/>
<!-- focused -->
<item android:drawable="@drawable/bg_normal"/>
<!-- 默认 -->
</selector>
3、将上面定义好的布局文件设定到选择器中(红字)
在需要使用背景资源的布局文件中选择上面创建的背景选择器(selector)
设置布局的clickable为true,并设置点击事件