Android selector属性说明

Selector作为选择器,常常用来作控件的背景,设置控件的状态效果。例如点击,获取焦点,选中等控制实现组件在不同状态下不同的背景颜色或图片的变换效果。

《Android 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)selectorshape一起使用;

<?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-listshape嵌套使用;

<?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>
3. shape用法

Android shape属性大全

4. layer-list用法

Android layer-list基本用法

    原文作者:翻译不了的声响
    原文地址: https://www.jianshu.com/p/90b915a49a52
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞