android关于selector和shape的使用

个人理解以及个人的总结,希望能帮助大家,也可以给些宝贵的意见。

在我们android 的设计开发的过程中,我们很多的布局都可能会用到drawable中自定义的xml文件,来实现我们的一些效果的显示。

我经常用到的有图形化的圆角的自定义,以及点击切换背景色或者背景图片等,有时候会用到selector,有时候用到shape,还有时候要结合使用。

下面通过代码来进行一定的解释吧。

1.关于点击切换背景图片的selector:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@mipmap/connect_pre" android:state_pressed="true"></item>
    <item android:drawable="@mipmap/connect_pre" android:state_focused="true"></item>
    <item android:drawable="@mipmap/connect"></item>
</selector> 
通过上面可以很清晰的看出来,通过对你当前控件的状态的判断,来进行一个背景的设置,如果你当前的状态是pressed="true",也就是按下的状态,那么drawable显示一个图片。如果是focused="true",也就是你当前的状态是获取焦点的状态。还有没有设置状态的,也就是不是处于触发状态的,原始状态设置一个背景图片。最后,在自己使用到的控件中将background设置成自己这个selector的名字。有基础的同学应该可以理解了。

2.对背景色的切换selector:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/clear_pre" android:state_pressed="true"></item>
    <item android:drawable="@drawable/clear_pre" android:state_focused="true"></item>
    <item android:drawable="@drawable/clear_normal"></item>
</selector> 
同样的不解释,主要说明一下drawable中的clear_pre和clear_normal中的内容,这俩背景色也是自己定义的背景色。

clear_pre.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="#ffffff"/>
</shape>
clear_normal.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="#4c4c4c"/>
</shape>

这就是两个drawable的文件引用,里面用到了shape,我们一个一个说,缺少的东西,后面会给总结上面尽量的补充上。

solid:这个标签,就是填充。

而我们solid中的android:color属性则是填充的颜色。

这样就能实现我们背景色的切换,根据当前控件的状态来实现。

3. selector和shape的结合使用:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape>
            <solid android:color="#ffffff" />
            <corners android:radius="30dp" />
            <padding android:bottom="20dp" android:left="20dp" android:right="20dp" android:top="20dp" />
        </shape>
    </item>
    <item android:state_focused="true">
        <shape>
            <solid android:color="#ffffff" />
            <corners android:radius="30dp" />
            <padding android:bottom="20dp" android:left="20dp" android:right="20dp" android:top="20dp" />
        </shape>
    </item>
    <item>
        <shape>
            <solid android:color="#404040" />
            <corners android:radius="30dp" />
            <padding android:bottom="20dp" android:left="20dp" android:right="20dp" android:top="20dp" />
        </shape>
    </item>
</selector>

首先先观看我们的格式,最外层是我们的selector,然后,在selector中就是item标签,item标签中,包含我们的状态判定,当前状态是pressed还是focused还是normal状态。

然后item标签下就是我们的shape,对我们的当前状态的控件进行图形化的自定义。

solid:填充,包括颜色

corners:圆角,包括圆角的半径,半径越大,角越圆

padding:内边距.

还涉及到一些别的属性,这里我们也总结一下,不全面的地方,希望大家能够给予批评:

shape中的一些常用属性:

<shape>  Android:shape=["rectangle" | "oval" | "line" | "ring"]
其中rectagle矩形,oval椭圆,line水平直线,ring环形

<corners > 圆角
Android:radius  圆角的半径 值越大角越圆
Android:topRightRadius  右上圆角半径
Android:bottomLeftRadius 右下圆角角半径
Android:topLeftRadius 左上圆角半径
Android:bottomRightRadius 左下圆角半径


<gradient>  渐变
Android:startColor  起始颜色
Android:endColor  结束颜色             
Android:angle  渐变角度,0从上到下,90表示从左到右,数值为45的整数倍默认为0;
Android:type  渐变的样式 liner线性渐变 radial环形渐变 sweep


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值