Android Drawable资源中selector、layer-list和shape标签详解

在实际开发中,我们经常会对控件的样式进行一些修改已满足我们的要求,这时候就会引用 Drawable 资源的样式文件。

1、StateListDrawable 资源

        StateListDrawable 用于组织多个 Drawable 对象。当使用 StateListDrawable 作为目标组件的背景、前景图片时,

StateListDrawable 对象所显示的 Drawable 对象会随目标组件状态的改变而自动切换。

        定义 StateListDrawable 对象的 XML 文件得根元素为 <selector.../> ,该元素可以包含多个 <item.../> 元素,该元素可指定如下属

性:

        android:color 或 android:drawable :指定颜色或 Drawable 对象。

        android:state_xxx :制定一个特定状态。

        例如如下语法格式:

<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 指定特定状态下的颜色 -->
    <item android:color="hex_color"
        android:state_pressed=["true" | "false"] />
</selector></span>

        其中 <item.../> 所支持的状态有如下几种:

        android:state_active :代表是否处于激活状态

        android:state_checkable :代表是否处于可勾选状态

        android:state_checked :代表是否处于已勾选状态

        android:state_enabled :代表是否处于可用状态

        android:state_first :代表是否处于开始状态

        android:state_focused :代表是否处于已得到焦点状态

        android:state_last :代表是否处于结束状态

        android:state_middle :代表是否处于中间状态

        android:state_pressed :代表是否处于已被按下状态

        android:state_selected :代表是否处于已被选中状态

        android:state_window_focused :代表窗口是否处于已得到焦点状态


2、LayerDrawable 资源

        与 StateListDrawable 有点类似,LayerDrawable 也可以包含一个 Drawable 数组,因此系统将会按这些 Drawable 对象的数组顺

序来绘制它们,索引最大的 Drawable 对象将会被绘制在最上面。

        定义 LayerDrawable 对象的 XML 文件的根元素为<layer-list.../> ,该元素可以包含多个 <item.../> 元素,该元素可指定如下属

性:

        android:drawable :指定作为 LayerDrawable 元素之一的 Drawable 对象。

        android:id :为该 Drawable 对象指定一个标识。

        android:buttom | top | left | right :它们用于制定一个长度值,用于指定将该 Drawable 对象绘制到目标组件的指定位置。

        例如如下语法格式:

<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 指定一个 Drawable 元素 -->
    <item android:id="@android:id/background"
        android:drawable="@drawable/xxx" />
</layer-list></span>


3、ShapeDrawable 资源

        ShapeDrawable 用于定义一个基本的几何图形(如矩形、圆形、线条等)。定义 ShapeDrawable 的 XML 文件的根元素是 

<shape.../> 元素,该元素可指定如下属性。

        android:shape=["rectangle" | "oval" | "line" | "ring"] :指定定义哪种类型的几何图形。

        定义 ShapeDrawable 对象的完整语法格式如下:

<?xml version="1.0" encoding="utf-8"?><!--android:shape=["rectangle" | "oval" | "line" | "ring"] > 矩形、椭圆、线形、环形-->
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- 定义几个图形的四个角的弧度 -->
    <corners
        android:radius="integer(dp)"                    四个角的圆角弧度
        android:topLeftRadius="integer(dp)"             左上角的圆角弧度
        android:topRightRadius="integer(dp)"            右上角的圆角弧度
        android:bottomLeftRadius="integer(dp)"          左下角的圆角弧度
        android:bottomRightRadius="integer(dp)" />      右下角的圆角弧度
    <!-- 定义使用渐变色填充 -->
    <gradient
        android:angle="integer"                         渐变角度,必须是45的倍数,0从左到右,90从下到上,仅type="linear"时有效
        android:centerX="float"                         渐变中心相对X位置,有效范围0-1
        android:centerY="float"                         渐变中心相对Y位置,有效范围0-1
        android:centerColor="color"                     中间颜色
        android:endColor="color"                        结束颜色
        android:gradientRadius="integer"                渐变半径,仅type="radial"时有效
        android:startColor="color"                      起始颜色
        android:type=["linear" | "radial" | "sweep"]    渐变样式:线性(默认)、放射、扫描
        android:useLevel=["true" | "false"] />          使用LevelListDrawable时就要设置为true
    <!-- 定义几何形状的内边距 -->
    <padding
        android:left="integer(dp)"                      左内边距
        android:top="integer(dp)"                       上内边距
        android:right="integer(dp)"                     右内边距
        android:bottom="integer(dp)" />                 下内边距
    <!-- 定义几何形状的大小 -->
    <size
        android:width="integer(dp)"
        android:height="integer(dp)" />
    <!-- 定义使用单种颜色填充 -->
    <solid
        android:color="color" />
    <!-- 定义为几何形状绘制边框 -->
    <stroke
        android:width="integer(dp)"                     描边的宽度
        android:color="color"                           描边的颜色
        android:dashWidth="integer(dp)"                 虚线的宽度,0表示实线
        android:dashGap="integer(dp)" />                虚线的间隔宽度
</shape>




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章