颜色状态列表资源

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"

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

示例
XML 文件保存在 res/color/button_text.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" />
另请参阅