颜色状态列表资源

一个 ColorStateList 是一个可以在 XML 中定义并应用为颜色的对象,该颜色实际上会根据应用到的 View 对象的状态而更改颜色。例如,一个 Button 控件可以存在于几种状态之一:按下、聚焦或两者都不是。使用颜色状态列表,您可以为每种状态提供不同的颜色。

您可以在 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"。仅在对象可以在可选中和不可选中控件之间转换时才有用。
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" />
另请参阅