在实际开发中,我们经常会对控件的样式进行一些修改已满足我们的要求,这时候就会引用 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>