Selector作为选择器,常常用来作控件的背景,设置控件的状态效果。例如点击,获取焦点,选中等控制实现组件在不同状态下不同的背景颜色或图片的变换效果。
按钮背景效果1. selector属性
Selector可以添加多个item
子标签,每个item
标签中可以定义相应的状态:
<?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"] > // “true”内边距会根据状态的变化而变化,“false”,内边距保持一致,所有状态中最大的内边距。
android:tileMode=["disabled" | "clamp" | "repeat" | "mirror"] // disabled 默认值,表示不使用平铺; clamp,复制边缘色彩;repeat,X、Y 轴进行重复图片显示;mirror,在水平和垂直方向上使用交替镜像的方式重复图片的绘制。
<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定义的 xml文件可以作为两种资源使用:Color-Selector 和 Drawable-Selector。
1)Drawable-Selector
drawable-selector 是背景图状态列表,可以跟图片一样使用,背景会根据组件的状态变化而变化。
在res/drawable
下创建btn_bg_selector.xml
文件,用于按钮的背景:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 当前窗口失去焦点时 -->
<item android:drawable="@drawable/bg_btn_lost_window_focused" android:state_window_focused="false" />
<!-- 不可用时 -->
<item android:drawable="@drawable/bg_btn_disable" android:state_enabled="false" />
<!-- 按压时 -->
<item android:drawable="@drawable/bg_btn_pressed" android:state_pressed="true" />
<!-- 被选中时 -->
<item android:drawable="@drawable/bg_btn_selected" android:state_selected="true" />
<!-- 被激活时 -->
<item android:drawable="@drawable/bg_btn_activated" android:state_activated="true" />
<!-- 默认时 -->
<item android:drawable="@drawable/bg_btn_normal" />
</selector>
2)Color-Selector
color-selector 是颜色状态列表,可以跟颜色一样使用,颜色会随着组件的状态而改变。
在res/drawable
下创建btn_color_selector.xml
文件,用于按钮的文本颜色:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 当前窗口失去焦点时 -->
<item android:color="@android:color/black" android:state_window_focused="false" />
<!-- 不可用时 -->
<item android:color="@android:color/background_light" android:state_enabled="false" />
<!-- 按压时 -->
<item android:color="@android:color/holo_blue_light" android:state_pressed="true" />
<!-- 被选中时 -->
<item android:color="@android:color/holo_green_dark" android:state_selected="true" />
<!-- 被激活时 -->
<item android:color="@android:color/holo_green_light" android:state_activated="true" />
<!-- 默认时 -->
<item android:color="@android:color/white" />
</selector>
2. selector用法
1)selector
和shape
一起使用;
<?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="6dp" />
<solid android:color="#ffffff" />
<padding android:bottom="10dp" android:left="20dp" android:right="20dp" android:top="10dp" />
<stroke android:width="1dp" android:color="eeeeee" />
</shape>
</item>
<item android:state_pressed="false">
<shape android:shape="rectangle">
<corners android:radius="6dp" />
<solid android:color="#f5f5f5" />
<padding android:bottom="10dp" android:left="20dp" android:right="20dp" android:top="10dp" />
<stroke android:width="1dp" android:color="#eeeeee" />
</shape>
</item>
</selector>
2)selector
,layer-list
和shape
嵌套使用;
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<layer-list>
<item>
<shape>
<!-- 边框颜色 -->
<solid android:color="#ff0000" />
</shape>
</item>
<item android:bottom="1dp" android:left="1dp" android:right="1dp">
<shape>
<!-- View填充颜色 -->
<solid android:color="#0000ff" />
</shape>
</item>
</layer-list>
</item>
<item android:state_pressed="false">
<layer-list>
<item>
<shape>
<!-- 边框颜色 -->
<solid android:color="#21bbff" />
</shape>
</item>
<item android:bottom="1dp" android:left="1dp" android:right="1dp" >
<shape>
<!-- View填充颜色 -->
<solid android:color="#eeeeee" />
</shape>
</item>
</layer-list>
</item>
</selector>
网友评论