Author : 傲游洒脱

概述:

Android

Button组件是最基本的一个常用控件。每一个Button都会使用系统提供的默认背景作为按钮的默认风格。但是这个系统默认的背景可能会因为不同的设备或者同一个平台系统的不同版本导致不同。例如XP和Win2000的默认UI差别很大。而实际中,在设计应用的界面风格时,我们往往需要让应用中Button有一个更漂亮的外观风格。这个时候我们就可以通过使用一个state

list

drawable(状态图片列表)实现根据Button不同的状态来用自己设计的背景图片替换Button默认的背景图片的功能,从而让此Button达到设计的效果。

那么state

list

drawable(状态图片列表)是什么呢?它是一种定义在xml文件中的图片资源,这种资源可以按照Button当前的状态来动态地选择不同的图片。利用它我们就可以让系统自动改变Button的背景图片,从而使Button实现更好的UI风格。

具体说明:

一个StateListDrawable是一个定义在xml文件中图片资源的对象。它可以根据某些对象不同的状态来从一系列的图片中筛选出一幅图片供这些对象的图片属性使用(形象的说,就好比是一个映射,我们只要将某对象的图片属性设置为这个映射,则这个对象的该图片属性就会在对象不同的状态下被具体指定为不同的图片)。

例如,Button控件可能会有多种状态,按下状态,获得焦点状态或者其它状态。通过一个state list

drawable(状态图片列表)来为不同状态下的Button提供不同的背景图片。

我们可以在一个xml文件中来定义这个状态图片列表。这个列表的所有图片资源都必须在这个xml文件中标签元素中的标签元素中定义说明。每一个都有各种各样的属性来描述这个条目信息应该在什么状态下被作为图片资源使用。

在状态改变的时候,这个状态图片列表的信息将从上到下被遍历,一旦某个描述的状态和当前状态相符,则停止遍历,使用当前描述的图片。类似于switch语句。注意,是使用第一个状态匹配的而不是最佳状态匹配的.

状态图片列表说明:

文件路径 :

res/drawable/filename.xml

这个文件名将被用作资源ID

被编译后的资源的数据类型 :

将生成StateListDrawable类的一个实例

资源标记:

In Java :R.java将自动生成一个ID, java可用过 R.drawable.filename调用

In

XML : 布局文件中可以通过

@[package:]drawable/filename调用

语法 :

encoding="utf-8"?>
xmlns:android="http://schemas.android.com/apk/res/android"
android:constantSize=["true"
| "false"]
android:dither=["true" | "false"]
android:variablePadding=["true" | "false"] >
android:drawable="@[package:]drawable/drawable_resource"
android:state_pressed=["true" | "false"]
android:state_focused=["true" | "false"]
android:state_selected=["true" | "false"]
android:state_checkable=["true" | "false"]
android:state_checked=["true" | "false"]
android:state_enabled=["true" | "false"]
android:state_window_focused=["true" | "false"]
/>

举例


XML file saved at
res/drawable/button.xml:
android:drawable="@drawable/button_pressed" /> 
android:drawable="@drawable/button_focused" /> 
以Button为例,展示在布局文件中如何使用上述状态图片列表
This layout XML applies the state list drawable to a Button:
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:background="@drawable/button" />