状态选择器

一、图片状态选选择器

        一)、创建xml文件:

        在drawable/xxx.xml下常见xml文件,在同目录下记得要放相关图片
<?xml version="1.0" encoding="utf-8" ?>   
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<!-- 默认时的背景图片-->  
  <item android:drawable="@drawable/pic1" />    
<!-- 没有焦点时的背景图片 -->  
  <item android:state_window_focused="false"   
        android:drawable="@drawable/pic1" />   
<!-- 非触摸模式下获得焦点并单击时的背景图片 -->  
  <item android:state_focused="true" android:state_pressed="true"   android:drawable= "@drawable/pic2" /> 
<!-- 触摸模式下单击时的背景图片-->  
<item android:state_focused="false" android:state_pressed="true"   android:drawable="@drawable/pic3" />  
<!--选中时的图片背景-->  
  <item android:state_selected="true"   android:drawable="@drawable/pic4" />   
<!--获得焦点时的图片背景-->  
  <item android:state_focused="true"   android:drawable="@drawable/pic5" />   
</selector>
        二)使用xml文件:
        1、使用方法:
             1)方法一:
                 (1)在listview中配置android:listSelector="@drawable/xxx
                 (2)在listview的item中添加属性android:background="@drawable/xxx"
             2)方法二:
                   Drawable drawable = getResources().getDrawable(R.drawable.xxx);
                   ListView.setSelector(drawable);
                   但是这样会出现列表有时候为黑的情况,需要加上:
                   android:cacheColorHint="@android:color/transparent"使其透明。

       2、相关属性:
             android:state_selected :是选中
             android:state_focused :是获得焦点
             android:state_pressed :是点击
             android:state_enabled :是设置是否响应事件,指所有事件
             根据这些状态同样可以设置button的selector效果。也可以设置selector改变button中的文字状态。

      3、Button文字效果
            1)以下是配置button中的文字效果:
            drawable/button_font.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:color="#FFF" />
    <item android:state_focused="true" android:color="#FFF" />
    <item android:state_pressed="true" android:color="#FFF" />
    <item android:color="#000" />
</selector>
           2)Button还可以实现更复杂的效果,例如渐变
           drawable/button_color.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">//定义当button 处于pressed 状态时的形态。 
    <shape>
        <gradient  android:startColor="#8600ff" /> 
        <stroke   android:width="2dp" android:color="#000000" /> 
        <corners android:radius="5dp" />  
        <padding android:left="10dp" android:top="10dp" 
                 android:bottom="10dp" android:right="10dp"/>  
    </shape>
</item> 
<item android:state_focused="true">//定义当button获得 focus时的形态 
    <shape> 
       <gradient android:startColor="#eac100"/> 
       <stroke android:width="2dp" android:color="#333333"  color="#ffffff"/> 
       <corners android:radius="8dp" />   
       <padding android:left="10dp" android:top="10dp" 
                android:bottom="10dp" android:right="10dp"/>
   </shape> 
</item>
</selector>
        3)最后,需要在包含 button的xml文件里添加两项。
        例如main.xml 文件,需要在<Button />里加两项
android:focusable="true"
android:background="@drawable/button_color"

       

二、颜色状态选择器

        三)语法示例:

               1、文件位置:
                     res/color/filename.xml,文件名被做资源的ID
               2、语法示例
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:color="@color/white" />
    <item android:state_focused="true" android:color="@color/white" />
    <item android:state_pressed="true" android:color="@color/white" />
    <item android:state_enabled="true" android:color="@color/black"/>
    <item android:state_enabled="false" android:color="@color/white"/>
    <item android:state_window_focused="false" android:color="@color/black"/>
    <item android:color="@color/black" />
</selector>
             3、属性
                   android:color:十六进制颜色,必须的。颜色是用RGB值来指定的,并且可选择alpha通道。
                   这个值始终是用#字符开头,后面跟的是Appha-Red-Green-Blue信息,格式如下:
                   #RGB
                   #ARGB
                   #RRGGBB
                   #AARRGGBB
                   android:state_pressed:一个布尔值
                       如果这个项目是在对象被按下时使用,那么就要设置为true。(如,按钮被触摸或点击时。)false应该用于默认的非按下状态。
                   android:state_focused:一个布尔值
                       如果这个项目是在对象获取焦点时使用,那么就要设置为true。如,一个选项标签被打开时。
                       如果这个项目要用于对象没有被被选择的时候,那么就要设置为false。
                   android:state_checkable:一个布尔值
                       如果这个项目要用于对象的可选择状态,那么就要设置为true。
                       如果这个项目要用于不可选状态,那么就要设置为false。(它只用于一个对象在可选和不可选之间的转换)。
                   android:state_checked:一个布尔值
                       如果这个项目要用于对象被勾选的时候,那么就要设置为true。否者设为false。
                   android:state_enabled:一个布尔值
                       如果这个项目要用于对象可用状态(接受触摸或点击事件的能力),那么就要设置为true,否者设置为false。
                   android:state_window_focused:一个布尔值
                       如果这个项目要用于应用程序窗口的有焦点状态(应用程序是在前台),那么就要设置为true,否者设置false。
            4、注意
                   A:要记住,状态列表中一个与对象当前状态匹配的项目会被使用。因此,如果列表中的第一项没有包含以上任何一种状态属性,那么每次都会使用这个项目,因此默认设置应该始终被放到最后。
                   B:如果出现失去焦点,背景色延迟的情况,不要使用magin。
                   C:drawable下的selector可是设置状态背景列表(可以让view的背景在不同状态时变化)说明:也可以定义状态背景列表,但是是定义在drawable文件夹下,用的不是color属性,而是drawable属性。
        四)自定义选择器
              (shape和选择器如何同时使用。例如:如何让一个按钮即是圆角的,又能在点击的时候出现颜色变化。)
               1、定义xml文件,Root Element选择shape
                     ①创建view被按下的布局文件:
                     进行相应的属性配置,如:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    <!-- 此处表示是一个矩形 -->
    <corners android:radius="3dp" />
    <!-- 此处表示是一个圆角 -->
    <solid android:color="#33000000" />
</shape>
                   ②创建view正常显示的布局(新建一个xml同),配置如下:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    <!-- 此处表示是一个矩形 -->
    <corners android:radius="3dp" />
    <!-- 此处表示是一个圆角 -->
    <solid android:color="#00000000" />
</shape>
             2、创建背景选择器:(Root Element为selector)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/bg_pressed" android:state_pressed="true"/>
    <!-- pressed -->
    <item android:drawable="@drawable/bg_pressed" android:state_focused="true"/>
    <!-- focused -->
    <item android:drawable="@drawable/bg_normal"/>
    <!-- 默认 -->
</selector>
           3、将上面定义好的布局文件设定到选择器中(红字)
                 在需要使用背景资源的布局文件中选择上面创建的背景选择器(selector)
                 设置布局的clickable为true,并设置点击事件







  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值