Android中提供一种xml的方式,让我们可以自由地定义背景,比较常用的就是shape标签和selector标签
shape
shape的翻译为形状的意思,一般用来定义背景的形状,如长方形,线条,圆形
- rectangle 矩形 默认
- oval 椭圆
- line 线条
- ring 环形
简单使用:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:tint="@color/white" android:shape="rectangle">
</shape>tint是用来设置背景颜色
上述代码即为白色的矩形,效果如下图:

一般我们将shape当做根标签来使用
corners 圆角
corners标签,即为圆角的意思,可定义的属性如下
| 属性 | 说明 | 
|---|---|
| radius | 定义4个方向圆角宽度 | 
| topRightRadius | 右上角圆角宽度 | 
| bottomLeftRadius | 左下角圆角宽度 | 
| bottomRightRadius | 右下角圆角宽度 | 
| topLeftRadius | 左上角圆角宽度 | 
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:tint="@color/white" android:shape="rectangle">
    <corners android:radius="12dp"/>
</shape>上述代码即为圆角矩形的效果:

stroke 边框
| 属性 | 说明 | 
|---|---|
| color | 边框颜色 | 
| width | 边框宽度 | 
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="12dp"/>
    <stroke android:color="@color/read_dot_bg" android:width="1dp"/>
</shape>注意: 这里代码中删除了shape中的tint属性,因为tint属性会优先级较高,导致边框无法显示出来!

solid 填充背景色
color 背景颜色
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="rectangle">
    <corners android:radius="12dp"/>
    <stroke android:color="@color/read_dot_bg" android:width="1dp"/>
    <solid android:color="@color/white"/>
</shape>上述代码,将背景设置了白色,且边框也能正常显示

gradient 渐变
| 属性 | 说明 | 
|---|---|
| startColor | 开始颜色 | 
| endColor | 结束颜色 | 
| angle | 角度 0 90 180 270 可以设置渐变的方向 | 
| type | 渐变类型,linear:线性 radial:辐射状 sweep:扫射 | 
angle属性记忆的方法是:先记住默认的方向,startColor到endColor,方向是从上到下,然后以逆时针为方向转动,如果为0,则是逆时针转动90°,以此类推
测试的方向,如果是45°的倍数,也是稍微有所区别
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="rectangle">
    <corners android:radius="12dp"/>
    <stroke android:color="@color/read_dot_bg" android:width="1dp"/>
    <solid android:color="@color/white"/>
    <gradient android:gradientRadius="5dp" android:startColor="@color/white" android:endColor="@color/font_blue"/>
</shape>PS: 注意solid和gradient两个标签的顺序,两者联用,位于xml下面的会覆盖上面的:

圆形背景
圆形背景,即设置了shape属性为oval
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <size
        android:width="5dp"
        android:height="5dp" />
    <solid android:color="#80011627" />
</shape>同时,加上了个size标签,用来定义宽高,这样才会显示出圆形,不然就是椭圆
这里size标签宽高似乎可以是任意值,因为是矢量,应用到View中会自动伸缩

PS:同理,如果想要正方形,设置shape属性了rectangle,同时加上size标签即可,如下图

ripple 水波纹
水波纹,需要用ripple标签,不过只支持Android5.0以上的版本,写法如下
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:color="@color/colorPrimary"
        tools:targetApi="lollipop">
    <!--上面的是涟漪(水波纹)的颜色-->
    <!--下面的则是背景色-->
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@color/colorAccent" />
            <corners android:radius="4dp" />
        </shape>
    </item>
</ripple>使用的话,View中background属性引用上面的xml文件即可
在自定义 <ripple/> 时,我们一般把它放到 drawable-v21 文件夹下, 在drawable文件夹下放置兼容低版本的普通 Drawable 文件,如 <shape/> 或者 <selector/>。
selector 标签
有时候需要自定义下按钮的点击变化背景等样式,就可以用到此标签来定义相关的点击变化效果
常用属性如下表所示:
| 属性 | 说明 | 
|---|---|
| state_pressed | 设置是否按压状态,一般在true时设置该属性,表示已按压状态,默认为false | 
| state_selected | 设置是否选中状态,true表示已选中,false表示未选中 | 
| state_checkable | 设置是否勾选状态,主要用于CheckBox和RadioButton,true表示已被勾选,false表示未被勾选 | 
| state_checked | 设置勾选是否可用状态,类似state_enabled,只是state_enabled会影响触摸或点击事件,state_checkable影响勾选事件 | 
| state_focused | 设置是否获得焦点状态,true表示获得焦点,默认为false,表示未获得焦点 | 
| state_enabled | 设置触摸或点击事件是否可用状态,一般只在false时设置该属性,表示不可用状态 | 
文本选中变色示例
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!--选中的颜色-->
    <item android:color="@color/read_dot_bg" android:state_checked="true" />
    <!--未选中的颜色 -->
    <item android:color="@color/black" android:state_checked="false" />
    <!--默认的颜色-->
    <item android:color="@color/black" />
</selector>checkbox选中效果变化示例
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!--选中的背景-->
    <item android:drawable="@drawable/radio_background_checked" android:state_checked="true" />
    <!--未选中背景 -->
    <item android:drawable="@drawable/radio_background_uncheck" android:state_checked="false" />
    <!--默认的背景-->
    <item android:drawable="@drawable/radio_background_normal" />
</selector>补充
关于透明色效果
透明色是定义在#后面前面的两个数值,是十六进制
PS:注意,似乎也有规则是在后面加上两位数值代表透明度
如:#011627 -> #80011627透明色
其中80即为透明度的十六进制,表示透明度为50%,可以参考下面透明度大全表格
<solid
    android:color="#4DFFFFF2">
</solid>透明度大全
不透度对应16进制大全(0-100)不透明度16进制
| 不透明度 | 16进制 | 
|---|---|
| 0% | 00 | 
| 1% | 03 | 
| 2% | 05 | 
| 3% | 08 | 
| 4% | 0A | 
| 5% | 0D | 
| 6% | 0F | 
| 7% | 12 | 
| 8% | 14 | 
| 9% | 17 | 
| 10% | 1A | 
| 11% | 1C | 
| 12% | 1F | 
| 13% | 21 | 
| 14% | 24 | 
| 15% | 26 | 
| 16% | 29 | 
| 17% | 2B | 
| 18% | 2E | 
| 19% | 30 | 
| 20% | 33 | 
| 21% | 36 | 
| 22% | 38 | 
| 23% | 3B | 
| 24% | 3D | 
| 25% | 40 | 
| 26% | 42 | 
| 27% | 45 | 
| 28% | 47 | 
| 29% | 4A | 
| 30% | 4D | 
| 31% | 4F | 
| 32% | 52 | 
| 33% | 54 | 
| 34% | 57 | 
| 35% | 59 | 
| 36% | 5C | 
| 37% | 5E | 
| 38% | 61 | 
| 39% | 63 | 
| 40% | 66 | 
| 41% | 69 | 
| 42% | 6B | 
| 43% | 6E | 
| 44% | 70 | 
| 45% | 73 | 
| 46% | 75 | 
| 47% | 78 | 
| 48% | 7A | 
| 49% | 7D | 
| 50% | 80 | 
| 51% | 82 | 
| 52% | 85 | 
| 53% | 87 | 
| 54% | 8A | 
| 55% | 8C | 
| 56% | 8F | 
| 57% | 91 | 
| 58% | 94 | 
| 59% | 96 | 
| 60% | 99 | 
| 61% | 9C | 
| 62% | 9E | 
| 63% | A1 | 
| 64% | A3 | 
| 65% | A6 | 
| 66% | A8 | 
| 67% | AB | 
| 68% | AD | 
| 69% | B0 | 
| 70% | B3 | 
| 71% | B5 | 
| 72% | B8 | 
| 73% | BA | 
| 74% | BD | 
| 75% | BF | 
| 76% | C2 | 
| 77% | C4 | 
| 78% | C7 | 
| 79% | C9 | 
| 80% | CC | 
| 81% | CF | 
| 82% | D1 | 
| 83% | D4 | 
| 84% | D6 | 
| 85% | D9 | 
| 86% | DB | 
| 87% | DE | 
| 88% | E0 | 
| 89% | E3 | 
| 90% | E6 | 
| 91% | E8 | 
| 92% | EB | 
| 93% | ED | 
| 94% | F0 | 
| 95% | F2 | 
| 96% | F5 | 
| 97% | F7 | 
| 98% | FA | 
| 99% | FC | 
| 100% | FF | 
到此这篇关于Android shape与selector标签使用的文章就介绍到这了,更多相关Android shape与selector标签使用内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!