安卓Selector

来源:互联网 发布:开源软件是什么 编辑:程序博客网 时间:2024/05/23 12:02
本文由PurpleSword(jzj1993)原创,转载请注明
原文网址 http://blog.csdn.net/jzj1993

安卓的按钮复选框等,在点击、选中等不同状态时,显示的图片不同。通常可以使用Selector进行定义(如res/drawable/button_selector.xml)

下面以按钮为例进行简要介绍

首先需要图像文件(分别为未按下和按下状态的图片资源):
    drawable/button_bg_normal.png
    drawable/button_bg_pressed.png

Selector的定义

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- pressed -->
    <item android:drawable="@drawable/bgcolor_translucent" android:state_pressed="true"/>
    <!-- default -->
    <item android:drawable="@drawable/bgcolor_transparent"/>
</selector>

Selector的应用

在View中应用

    <ImageButton
        android:id="@+id/main_bn_add"
        android:background="@drawable/button_selector" />

在ListView中应用于子控件

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/settings_listview"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:cacheColorHint="@null"
    android:divider="#FFFFFF"
    android:dividerHeight="2dp"
    android:listSelector="@drawable/selector_setting_item"
    android:scrollingCache="true" >
</ListView>


Selector还可以这样定义

Selector用颜色填充

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- pressed -->
    <item android:state_pressed="true"><color android:color="#80000000" />
    </item>
    <!-- default -->
    <item><color android:color="#00000000" />
    </item>
</selector>

Selector用渐变形状填充

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape>
            <gradient android:startColor="#8600ff" />
            <stroke android:width="2dp" android:color="#000000" />
            <corners android:radius="5dp" />
            <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
        </shape>
    </item>
    
    <item android:state_focused="true">
        <shape>
            <gradient android:startColor="#eac100" />
            <stroke android:width="2dp" color="#ffffff" android:color="#333333" />
            <corners android:radius="8dp" />
            <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
        </shape>
    </item>
</selector>


0 0