Android shape与selector标签使用详解

2022-05-24 11:55:38
目录
shapecorners 圆角stroke 边框solid 填充背景色gradient 渐变圆形背景ripple 水波纹selector 标签文本选中变色示例checkbox选中效果变化示例补充关于透明色效果透明度大全

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标签使用内容请搜索易采站长站以前的文章或继续浏览下面的相关文章希望大家以后多多支持易采站长站!