Android的背景选择器selector

一、selector介绍:    

      存放位置:res/drawable/文件的名称.xml

     1 使用场景:控件不同状态显示不同的样式,这时候就用到selector

     2 item: 每个item表示一种状态(可以几种状态叠加使用)

     3  匹配规则:第一个匹配的状态将会使用,如果第一个没有任何状态则会一直加载第一个,所以默认状态要放到最后

     4 几种常见状态说明

  

     1)android:state_pressed :   boolean。“true”表示按下状态使用(例如按钮按下);“false”表示非按下状态使用。
     2)android:state_focusedboolean。“true”表示聚焦状态使用(例如使用滚动球/d-pad聚焦button);“false”表示非聚焦状态使用。
     3)android:state_selected : boolean。“true”表示选中状态使用(例如tab打开);“false”表示非选中状态使用。
     4)  boolean。“true”表示可勾选状态时使用;“false”表示非可勾选状态使用。(只对能切换可勾选—非可勾选的构件有用。)
     5)   boolean。“true”表示勾选状态使用;“false”表示非勾选状态使用。 
     6)   boolean。“true”表示可用状态使用(能接收触摸/点击事件);“false”表示不可用状态使用。 
     7) android:window_focused 
      boolean。“true”表示应用程序窗口有焦点时使用(应用程序在前台);“false”表示无焦点时使用(例如notification栏拉下或对话框显示)。 
     

二、例子: 1)listView状态改变   2)button状态改变 

  1、 listView 中加载方法 android:listSelector="@drawable/list_item_bg"

或者在listview的item中添加属性android:background=“@drawable/list_item_bg"即可实现,或者在java代码中使用:Drawable drawable = getResources().getDrawable(R.drawable.list_item_bg);

 

list_item_bg.xml 代码,按照上面的添加上样式即可

 

<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 没有焦点时的背景图片-->
    <item android:state_window_focused="false" android:drawable="@color/red" />
    
    <!-- 非触摸模式下获得焦点并单击时的背景图片-->
    <item android:state_focused="true" android:state_pressed="true"
        android:drawable="@color/blue" />
    <!-- 触摸模式下单击时的背景图片-->
    <item android:state_focused="false" android:state_pressed="true" 
        android:drawable="@color/green" />
    <!--选中时的图片背景-->
    <item android:state_selected="true" android:drawable="@color/pink" />
    <!--获得焦点时的图片背景-->
    <item android:state_focused="true" android:drawable="@color/black" />

    <!-- 默认时的背景图片android:drawable可以是图片也可以是颜色  -->
    <item android:drawable="@color/white"/>
    
</selector>

 

2、按钮的selector 

  1)普通的样式即不同的状态给予不同的,简单的背景样式

 

<?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/red" />
    <item android:state_focused="true" android:drawable="@color/green" />
    <item android:state_pressed="true" android:drawable="@color/blue"  />
    <item android:drawable="@color/pink" />
</selector>

   2)不同的状态item下,添加自定义的shape背景样式,(添加渐变、描边、填充色,圆角处理,padding距离处理等),自定义的shap在下面会具体的学习

 

<?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" />
            <corners android:radius="8dp" />
            <padding android:left="10dp" android:top="10dp"
                android:bottom="10dp" android:right="10dp" />
        </shape>
    </item>
    
    <item>       
        <shape>
            <solid android:color="@color/white"/>
            <stroke
                android:width="2dp"
                android:color="@color/pink" />
            <corners 
                android:topRightRadius="5dp"
                android:bottomLeftRadius="5dp"
                android:topLeftRadius="0dp"
                android:bottomRightRadius="0dp"
            />
        </shape>
    </item>
</selector>

 

三、Shape的使用

     简介

作用:XML中定义的几何形状

位置:res/drawable/文件的名称.xml

使用的方法:

Java代码中:R.drawable.文件的名称

XML中:Android:background="@drawable/文件的名称"

属性:

<shape>  Android:shape=["rectangle" | "oval" | "line" | "ring"]

其中rectagle矩形,oval椭圆,line水平直线,ring环形

<shape>中子节点的常用属性:

<gradient>  渐变

Android:startColor  

起始颜色

Android:endColor  

结束颜色             

Android:angle  

渐变角度,0从左到右,90表示从下到上,数值为45的整数倍,默认为0;

Android:type  

渐变的样式 liner线性渐变 radial环形渐变 sweep

<solid >  填充

Android:color  

填充的颜色

<stroke >描边

Android:width 

描边的宽度

Android:color 

描边的颜色

Android:dashWidth

 表示'-'横线的宽度

Android:dashGap 

表示'-'横线之间的距离

<corners >圆角

Android:radius  

圆角的半径 值越大角越圆

Android:topRightRadius  

右上圆角半径

Android:bottomLeftRadius 

右下圆角角半径

Android:topLeftRadius 

左上圆角半径

Android:bottomRightRadius 

左下圆角半径

<padding >填充

android:bottom="1.0dip" 

底部填充

android:left="1.0dip" 

左边填充

android:right="1.0dip" 

右边填充

android:top="0.0dip" 

上面填充

 

 

 

 

 

猜你喜欢

转载自username2.iteye.com/blog/2191782