## 顏色狀態列表資源
`[ColorStateList](https://developer.android.google.cn/reference/android/content/res/ColorStateList)`是一個您可以在 XML 中定義的對象,您可以將其作為顏色來應用,但它實際上會更改顏色,具體取決于其應用到的`[View](https://developer.android.google.cn/reference/android/view/View)`對象的狀態。例如,`[Button](https://developer.android.google.cn/reference/android/widget/Button)`微件可以處于多種不同狀態中的一種(按下、聚焦或既不按下也不聚焦),而使用顏色狀態列表,您可以為每種狀態提供不同的顏色。
您可以在 XML 文件中描述狀態列表。每種顏色都在單個`<selector>`元素內的`<item>`元素中定義。每個`<item>`使用不同的屬性描述其應在什么狀態下使用。
在每次狀態更改期間,系統將從上到下遍歷狀態列表,并且將使用與當前狀態匹配的第一項。系統的選擇并非基于“最佳匹配”,而僅僅是基于符合狀態的最低標準的第一項。
**注意**:如果要提供靜態顏色資源,請使用簡單的[顏色](https://developer.android.google.cn/guide/topics/resources/more-resources#Color)值。
### 文件位置:
`res/color/*filename*.xml`
該文件名將用作資源 ID。
編譯后的資源數據類型:
指向`[ColorStateList](https://developer.android.google.cn/reference/android/content/res/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: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: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" />
~~~