颜色状态列表资源

ColorStateList 是一个可以在 XML 中定义并应用为颜色的对象,它实际上是根据所应用到的 View 对象的状态来改变颜色。例如,Button widget 可以处于几种状态(即按下、聚焦或既不按下也不聚焦)中的一种。您可以使用颜色状态列表,为每种状态提供不同的颜色。

您可以在 XML 文件中描述状态列表。每种颜色都在单个 <selector> 元素内的 <item> 元素中定义。每个 <item> 使用不同的属性来描述其是在什么状态下使用。

在每次状态更改期间,系统将从上到下遍历状态列表,并且将使用与当前状态匹配的第一项。系统的选择并非基于“最佳”匹配,而是基于符合状态的最低标准的第一项。

注意:如果要提供静态颜色资源,请使用简单的颜色值。

文件位置:
res/color/filename.xml
文件名用作资源 ID。
编译后的资源数据类型:
指向 ColorStateList 的资源指针
资源引用:
在 Java 中:R.color.filename
在 XML 中:@[package:]color/filename
语法:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:color="hex_color"
        android:lStar="floating_point_value"
        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"] />
</selector>
元素:
<selector>
必需。该元素是根元素。包含一个或多个 <item> 元素。

属性:

xmlns:android
字符串。必需。定义 XML 命名空间,即 "http://schemas.android.com/apk/res/android"
<item>
定义在某些状态下使用的颜色,状态通过其属性来描述。该元素是 <selector> 元素的子元素。

属性:

android:color
十六进制颜色。必需。颜色使用 RGB 值和可选的 Alpha 通道指定。

该值始终以井号 (#) 字符开头,后跟以下某种格式的“透明度、红、绿、蓝”(Alpha-Red-Green-Blue) 信息:

  • #RGB
  • #ARGB
  • #RRGGBB
  • #AARRGGBB
android:lStar
浮点数。可选。该属性用于修改基本颜色的感知亮度。它既可以采用 0 到 100 之间的浮点值,也可以采用解析为这些值的主题属性。计算某项的整体颜色时,系统会将基础颜色转换为适用于无障碍功能的颜色空间,并将其 L* 设置为 lStar 属性中指定的值。

示例:android:lStar="50"

android:state_pressed
布尔值。如果是在点按对象时(例如轻触或点击按钮时)使用此项,则为 "true";如果是在默认的非点按状态下使用此项,则为 "false"
android:state_focused
布尔值。如果是在聚焦对象时(例如使用轨迹球或方向键突出显示按钮时)使用此项,则为 "true";如果是在默认的非聚焦状态下使用此项,则为 "false"
android:state_selected
布尔值。如果是在选择对象时(例如打开标签页时)使用此项,则为 "true";如果是在未选择对象时使用此项,则为 "false"
android:state_checkable
布尔值。如果是在对象可勾选时使用此项,则为 "true";如果是在对象不可勾选时使用此项,则为 "false"。仅适用于对象可在可勾选和不可勾选的 widget 之间转换的情况。
android:state_checked
布尔值。如果是在对象被勾选时使用此项,则为 "true";如果是在对象被取消选择时使用此项,则为 "false"
android:state_enabled
布尔值。如果是在启用对象(即能够接收轻触或点击事件)时使用此项,则为 "true";如果是在停用对象时使用此项,则为 "false"
android:state_window_focused
布尔值。如果是在应用窗口具有焦点(即应用位于前台)时使用此项,则为 "true";如果是在应用窗口没有焦点(例如通知栏下拉或出现一个对话框)时使用此项,则为 "false"

注意:系统会应用状态列表中第一个与对象当前状态匹配的项。因此,如果列表中的第一项不包含上述任何状态属性,则每次都会应用该项。因此,请将默认值放在最后,如以下示例所示。

示例:
保存在 res/color/button_text.xml 的 XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:color="#ffff0000"/> <!-- pressed -->
    <item android:state_focused="true"
          android:color="#ff0000ff"/> <!-- focused -->
    <item android:color="#ff000000"/> <!-- default -->
</selector>

以下布局 XML 会将颜色列表应用于 View

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/button_text"
    android:textColor="@color/button_text" />
另请参阅: