颜色状态列表资源

一个 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" />
另请参阅