Selector与Shape的基本用法

1. Selector


drawable 的 item 中可以有以下属性:

android:drawable ="@drawable/drawable_resource"
android:state_pressed        =["true"| "false"] 点击 
android:state_focused        =["true"| "false"] 获得焦点 
android:state_selected       =["true"| "false"] 选中 
android:state_active         =["true"| "false"]  
android:state_checkable      =["true"| "false"] 是否可选择 
android:state_checked        =["true"| "false"] 选择 
android:state_enabled        =["true"| "false"] 是否响应事件 
android:state_window_focused =["true"| "false"]

 

2. Shape


                solid:实心,就是填充     

android:color = "#000000"   指定填充的颜色


                gradient:渐变

android:startColor  起始颜色 
android:endColor    结束颜色 
android:angle       渐变角度,必须为45的整数倍。 
                      
渐变模式: 
android:type="linear"       默认为线性渐变模式 
android:type="radial"       径向渐变,需要指定半径 
android:gradientRadius="50" 半径为50


                stroke:描边

android:width="2dp"描边的宽度 
android:color       描边的颜色 
                   
还可以把描边弄成虚线的形式,设置方式为: 
android:dashWidth="5dp"表示'-'这样一个横线的宽度 
android:dashGap="3dp"  表示'-'之间隔开的距离


                corners:圆角  

android:radius  角的弧度,值越大角越圆 
                 
还可以把四个角设定成不同的角度: 
    <corners  
       android:topRightRadius="20dp"      右上角 
        android:bottomLeftRadius="20dp"   右下角 
        android:topLeftRadius="1dp"       左上角 
        android:bottomRightRadius="0dp"   左下角 
     />


        这里有个地方需要注意,bottomLeftRadius是右下角,而不是左下角,这个有点郁闷,不过不影响使用,记得别搞错了就行。


               padding:间隔

 

3. 用法:


第一种是在 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); 
listView.setSelector(drawable);

 

4. 例:list_item_bg.xml

<?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="#ff8c00"
                android:endColor="#FFFFFF"
                android:type="radial"
                android:gradientRadius="50"/> 
             <!-- 描边 --> 
             <stroke 
                 android:width="2dp"
                 android:color="#dcdcdc"
                 android:dashWidth="5dp"
                 android:dashGap="3dp"/> 
             <!-- 圆角 --> 
             <corners 
                 android:radius="2dp"/> 
             <padding 
                 android:left="10dp"
                 android:top="10dp"
                 android:right="10dp"
                 android:bottom="10dp"/> 
         </shape> 
     </item> 
      
     <item android:state_focused="true"> 
         <shape> 
             <gradient 
                android:startColor="#ffc2b7"
                android:endColor="#ffc2b7"
                android:angle="270"/> 
            <stroke 
                android:width="2dp"
                android:color="#dcdcdc"/> 
            <corners 
                android:radius="2dp"/> 
            <padding 
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp"/> 
        </shape> 
    </item> 
      
    <item>        
        <shape> 
            <solid android:color="#ff9d77"/> 
            <stroke 
                android:width="2dp"
                android:color="#fad3cf"/> 
            <corners  
                android:topRightRadius="5dp"
                android:bottomLeftRadius="5dp"
                android:topLeftRadius="0dp"
                android:bottomRightRadius="0dp"/>
  
            <padding 
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp"/> 
        </shape> 
    </item> 
</selector>



 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值