【Android -- Res资源】selector

192 阅读2分钟

一、概念

selector就是状态列表(StateList), 它分为两种,一种Color-Selector 和Drawable-Selector。

二、常用属性

  • android:state_enabled: 设置触摸或点击事件是否可用状态,一般只在false时设置该属性,表示不可用状态。

  • android:state_pressed: 设置是否按压状态,一般在true时设置该属性,表示已按压状态,默认为false

  • android:state_selected: 设置是否选中状态,true表示已选中,false表示未选中

  • android:state_checked: 设置是否勾选状态,主要用于CheckBox和 RadioButton,true表示已被勾选,false表示未被勾选

  • android:state_checkable: 设置勾选是否可用状态,类似state_enabled,只是state_enabled会影响触摸或点击事件,而state_checkable影响勾选事件

  • android:state_focused: 设置是否获得焦点状态,true表示获得焦点,默认为false,表示未获得焦点

  • android:state_window_focused: 设置当前窗口是否获得焦点状态,true表示获得焦点,false表示未获得焦点,例如拉下通知栏或弹出对话框时,当前界面就会失去焦点;另外,ListView的ListItem获得焦点时也会触发true状态,可以理解为当前窗口就是ListItem本身

  • android:state_activated: 设置是否被激活状态,true 表示被激活,false表示未激活,

三、Color-Selector

color-selector 就是颜色状态列表,可以跟color一样使用,颜色会随着组件的状态而改变。文件的位置存储于

/res/color/filename.xml

在Java中使用是:R.color.filename
在XML中使用是:@[package]color/filename

语法

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:color="hex_color"               //颜色值,#RGB,$ARGB,#RRGGBB,#AARRGGBB
        android:state_pressed=["true" | "false"]//是否触摸 
        android:state_focused=["true" | "false"]//是否获得焦点
        android:state_selected=["true" | "false"]//是否被状态
        android:state_checkable=["true" | "false"]//是否可选
        android:state_checked=["true" | "false"]//是否选中
        android:state_enabled=["true" | "false"]//是否可用
        android:state_window_focused=["true" | "false"] />//是否窗口聚焦
</selector>

四、Drawable-Selector

drawable-selector 是背景图状态列表,可以跟图片一样使用,背景会根据组件的状态变化而变化。文件存储于

/res/drawable/filename.xml

Java中调用:R.drawable.filename
XML中调用:@drawable/filename

语法

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
    android:constantSize=["true" | "false"]//drawable的大小是否当中状态变化true表示是变化false表示不变换默认为false
    android:dither=["true" | "false"]//当位图与屏幕的像素配置不一样时(例如一个ARGB为8888的位图与RGB为555的屏幕)会自行递色(dither)。设置为false时不可递色默认true
    android:variablePadding=["true" | "false"] >//内边距是否变化,默认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>