• Android状态选择器用法总结


    原创文章,转载请注明出处http://www.cnblogs.com/baipengzhan/p/6284682.html         

                 

    本文首先列出常见状态选择器的创建,然后按照常用控件来分别列出状态选择器的具体用法。

    颜色状态选择器颜色状态选择器创建在res/color目录下,color目录一般不存在,我们自己创建即可。

    颜色状态选择器只能用作改变颜色的地方,例如改变文字颜色等场合,不能作为背景,

    当做背景时会出错,这点千万要注意。

    以下为一个颜色状态选择器,今后可以参考这个创建其它的:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:color="#f00" android:state_checked="true"/>
        <item android:color="#f00" android:state_pressed="true"/>
        <item android:color="#f00" android:state_selected="true"/>
    
        <!--没被选中时的颜色-->
        <item android:color="#000"/>
    
    </selector>
    

    这里的颜色值为硬编码,不推荐,只为说明。

    这个颜色状态选择器对应着四种状态,前三种对应着同一种颜色,最后一种为另一种颜色。

    四种状态分别为:选中(checked),按下(pressed),选中(selected)和默认状态。

    我们通过一个小例子看以下它的使用:

    <RadioButton
                android:id="@+id/button_4"
                android:text="button_4"
                android:button="@null"
                android:textColor="@color/radiobutton_color_selector"
                android:background="@drawable/radiobutton_bg_selector"
                android:gravity="center"
                android:layout_weight="1"
                android:drawableTop="@drawable/radiobutton_pic_selector"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
    

    这里是在一个RadioButton中改变文字颜色时使用的:

    android:textColor="@color/radiobutton_color_selector"  

    一般状态选择器

    这种最常用的状态选择器创建在res/drawable目录下,该目录是存在的不需要创建。

    这种状态选择器用途就比上一种颜色状态选择器用途广泛多了,比如改变背景图片,

    改变背景颜色,改变背景形状等等。

    下面我们创建一个改变背景颜色的状态选择器

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_selected="true" android:drawable="@color/radiobutton_bg_selected"/>
        <item android:state_checked="true" android:drawable="@color/radiobutton_bg_selected"/>
        <item android:state_pressed="true" android:drawable="@color/radiobutton_bg_selected"/>
    
        <!--未被选中-->
        <item android:drawable="@color/radiobutton_bg_normal"/>
    
    </selector>
    

    创建的时候要注意,这里是通过drawable属性改变颜色的,而不是color属性,不同于颜色状态选择器。

    drawable属性值不能直接设置颜色值,如#f00等,而要将颜色值封装在values目录下,colors.xml文件中。

    该选择器的使用也很简单,作为背景即可,见颜色状态选择器中的例子,设置背景:

    android:background="@drawable/radiobutton_bg_selector"

    下面我们创建一个改变背景图片的状态选择器

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_selected="true" android:drawable="@mipmap/ic_selected"/>
        <item android:state_checked="true" android:drawable="@mipmap/ic_selected"/>
        <item android:state_pressed="true" android:drawable="@mipmap/ic_selected"/>
    
        <!--未被选中-->
        <item android:drawable="@mipmap/ic_launcher"/>
    
    </selector>
    

    注意,本状态选择器同样适用android:drawable属性,通过设置图片来让其被使用时出现图片而不是颜色。

    但在输入android:drawable属性值时,系统可能出现不提醒(输入不完整信息,提醒完整信息)情况,这个时候我们要手动输入。

    这个状态选择器的使用同样用上面RadioButton的例子,在文字上面的图片设置时使用:

    android:drawableTop="@drawable/radiobutton_pic_selector"  

    下面我们创建一个改变背景形状的状态选择器

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true" android:drawable="@drawable/textview_pressed_shape"/>
        <item android:state_selected="true" android:drawable="@drawable/textview_pressed_shape"/>
        <item android:state_checked="true" android:drawable="@drawable/textview_pressed_shape"/>
    
        <!--未被选中时-->
        <item android:drawable="@drawable/textview_normal_shape"/>
    
    </selector>
    

    选中和未选中时背景形状改变,形状资源使用的是自己创建的shape文件,见下面代码:

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle"
        >
    
        <!--矩形的四个角都设置为圆角,半径为5dp-->
        <corners android:radius="5dp"/>
        <!--设置形状的颜色-->
        <solid android:color="#f00"/>
        <!--设置形状的大小-->
        <size android:width="80dp" android:height="20dp"/>
    
    </shape>
    
    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="oval"
        >
    
        <!--设置形状的颜色-->
        <solid android:color="#0f0"/>
        <!--设置形状的大小-->
        <size android:width="40dp" android:height="20dp"/>
    
    </shape>
    

    shape文件同样创建在res/drawable目录下,本文不做详细介绍。

    注意,shape中设置的长宽没有起作用,目前没有查到原因,留待今后解决。  

    下面我们创建一个改变背景渐变色的状态选择器  

     这里状态选择器和上一种的区别是shape文件中的设置发生了变化,其余都一样,请看下面的代码:

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle"
        >
    
        <!--矩形的四个角都设置为圆角,半径为5dp-->
        <corners android:radius="5dp"/>
        <!--设置渐变色-->
        <gradient android:startColor="#00f" android:centerColor="#0f0" android:endColor="#f00"/>
    
    </shape>
    
    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle"
        >
    
        <!--矩形的四个角都设置为圆角,半径为5dp-->
        <corners android:radius="5dp"/>
        <!--设置渐变色-->
        <gradient android:startColor="#f00" android:centerColor="#0f0" android:endColor="#00f"/>
    
    </shape>
    

    好啦,我们就先总结到这里,最后啰嗦一句,颜色状态选择器放在res/color目录下,这个目录要手动创建,使用的时候只能当做颜色使用,不能当做背景使用;

                        一般状态选择器放在res/drawable目录下,此目录已经存在,无需我们创建,使用的时候要当做背景,可以改变背景颜色,形状,图片等。

      

  • 相关阅读:
    tableView//collectionView加载时的动画
    关于collectionView和tableView的两种cell的出列方法的区别
    缓存的实现,主要是图片缓存整理
    android context获取目录详解
    Android网络传输中必用的两个加密算法:MD5 和 RSA 及Base64加密总结
    listview 与 button 焦点 在item添加下列属性
    VScode 安装必备
    centos7 安装docker
    1290
    MySQL“Another MySQL daemon already running with the same unix socket” 报错信息处理
  • 原文地址:https://www.cnblogs.com/baipengzhan/p/Android_selector.html
Copyright © 2020-2023  润新知