Android Selector & Shape

Selector & Shape

res/drawable or res/color 目录下




Selector

用于改变样式,比如按钮默认是白色的,获得焦点时变蓝色,按下时变黑色

<?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_focused="true"  android:drawable="@drawable/pic2" />     
    <!-- 单击时的背景图片 :: 通过Shape换颜色 -->    
    <item android:state_pressed="true" ><shape><solid android:color="#E8B714"/></shape></item>
    <!-- 选中时的图片背景 :: 通过资源的Shape换样式 -->    
    <item android:state_selected="true"  android:drawable="@drawable/myshape" />    
    <!-- 启用且获得焦点时的图片背景 -->    
    <item android:state_enabled=“true” android:state_focused="true"  android:drawable="@drawable/pic5" />     
</selector>

Selector属性

属性=”true”/”false”功能
android:constantSizedrawable的大小是否当中状态变化,true表示是变化,false表示不变换,默认为false
android:dither当位图与屏幕的像素配置不一样时(例如,一个ARGB为8888的位图与RGB为555的屏幕)会自行递色(dither)。设置为false时不可递色。默认true
android:variablePadding内边距是否变化,默认false

item if

属性=”true”/”false”功能
android:state_pressed是否触摸/单击
android:state_focused是否获得焦点
android:state_selected是否被状态
android:state_checkable是否可选
android:state_checked是否选中
android:state_enabled是否启用/响应事件
android:state_activated是否激活
android:state_window_focused应用程序是否在前台,当通知栏被拉下或者对话框弹出时应用程序就不在前台

item then

属性功能
android:drawable=”@drawable/pic”切换图片资源
android:color=”#FFFFFF”切换颜色

再解析

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
    android:constantSize=["true" | "false"]//drawable的大小是否当中状态变化,true表示是变化,false表示不变换,默认为false
    android:dither=["true" | "false"]//当位图与屏幕的像素配置不一样时(例如,一个ARGB为8888的位图与RGB为555的屏幕)会自行递色(dither)。设置为false时不可递色。默认true
    android:variablePadding=["true" | "false"]//内边距是否变化,默认false >
    <item 一个个选项(获得焦点时/按住时/...)
        //如果
        android:state_pressed=["true"/"false"] //是否被触摸/单击
        android:state_focused=["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"] //应用程序是否在前台,当通知栏被拉下或者对话框弹出时应用程序就不在前台
        //那么
        android:drawable="@drawable/pic" //切换图片资源
         />
      <item 2 />
      ...
</selector>




引用::

android:listSelector="@drawable/selector_my"
android:background="@drawable/selector_my"
android:textColor="@color/selector_my"
View.setSelector( getResources().getDrawable(R.drawable.myselector) );

为了防止列表拉黑的情况发生,需要在ListView中添加以下的属性代码android:cacheColorHint="@android:color/transparent"




shape

shape用于设定形状,可以在selector,layout等里面使用,有6个子标签,各属性如下:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval"  > <!-- shape的形状: rectangle:长方形, oval:椭圆, line:线条, ring:圆环  -->
    <!--  android:innerRadius: 内环的半径
            android:innerRadiusRatio: 内环的比例 (例: =2, 那么内环的半径就为环半径除以2, 如果设置了innerRadius则不起作用)
            android:thickness: 环的厚度
            android:thicknessRatio: 环的厚度比例 (例: =2, 那么环的厚度就为环半径除以2; 如果设置了thickness则不起作用)
            android:useLevel: 只有当shape使用在LevelListDrawable中的时候, 这个值为true, 否则为false -->

    <!-- 实心 -->
    <solid android:color="#FFDEAD"/><!-- 填充的颜色 -->

    <!-- 大小 -->
    <size android:width="50dp" android:height="50dp"/><!-- 宽度, 高度 -->

    <!-- 间隔 -->
    <padding
        android:left="20dp"
        android:top="20dp"
        android:right="20dp"
        android:bottom="20dp"/>
    <!-- 各方向的间隔 内边距 同XML的android:padding -->

    <!-- 圆角 -->
    <corners android:radius="9dp" />
    <!--  android:radius="9dp" 设置四个角的半径 (单独设定的圆角半径会覆盖radius)
            android:topLeftRadius="2dp" 设置左上角的半径
            android:topRightRadius="2dp" 设置右上角的半径
            android:bottomLeftRadius="2dp" 设置右下角的半径
            android:bottomRightRadius="2dp" 设置左下角的半径 -->

    <!-- 渐变 -->
    <gradient
        android:startColor="#FFFFFF"
        android:endColor="#FF0000"
        android:type="radial"
        android:gradientRadius="80"/> 
    <!-- 设置填充颜色后,渐变无效
        android:startColor="#FFFFFF" 起始颜色
        android:centerColor="#000000" 过渡颜色
        android:endColor="#FF0000" 结束颜色
        android:angle="45" 渐变角度 (必须是45的倍数)
        android:type="radial" 渐变类型: linear:线性变化, radial:辐射渐变, sweep:扫描渐变
        android:centerX="0"
        android:centerY="0"
        android:gradientRadius="90" 辐射半径, 类型=radial时需要设置  -->

    <!-- 描边  -->
    <stroke
        android:width="2dp"
        android:color="@android:color/black"
        android:dashWidth="1dp"
        android:dashGap="2dp"/>
    <!--  android:width=”20dp” 边边的宽度 
            android:color=”@android:color/black” 边边的颜色 
            android:dashWidth=”2dp” 虚线的宽度 
            android:dashGap=”20dp” 虚线的间隔宽度 -->

</shape>




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值