ColorStateList是能夠把申請的顏色定義在XML中的一個對象,但是它實際上會根據使用這個ColorStateList對象的View對象的狀態,來改變顏色。例如,Button控制項存在幾種不同的狀態之一(按下、聚焦、或者都不是),並且它要使用一個顏色狀態列表,在每個狀態期間,可以提供不同的顏色。
可以在一個XML檔案中描述這個狀態列表。每個顏色被定義在一個<selector>元素內部的<item>元素中。每個<item>元素使用各種屬性來描述它應該用於那個狀態中。
每個狀態改變期間,會從上到下遍曆狀態列表,第一個被找到的與目前狀態匹配的顏色會被使用,這個選擇不是基於首選,而是簡單選擇遇到的第一個滿足條件的項目。
注意:如果要提供靜態顏色資源,請使用簡單的Color值。
檔案位置(FILE LOCATION):
Res/color/filename.xml,檔案名稱被做資源的ID。
被編譯的資源資料類型(COMPLILED RESOURCE DATATYPE):
資源指向一個ColorStateList對象。
資源引用(RESOURCE REFERENCE):
在Java代碼中:R.color.filename
在XML中:@[package:]color/filename
文法(SYNTAX):
<?xml version="1.0" encoding="utf-8"?>
<selectorxmlns: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>
元素(ELEMENTS):
<selector>
必須的,它必須是根項目。包含一個或多個<item>元素。
屬性(ATTRIBUTES):
xmlns:android:
字串,必須的。它定義了XML的命名空間,必須是“http://schemas.android.com/apk/res/android”。
<item>
定義某個狀態期間使用的顏色,顏色會做為這個元素的一個屬性。它必須是<selector>元素的子項目。
屬性(ATTRIBUTES):
android:color
十六進位顏色,必須的。顏色是用RGB值來指定的,並且可選擇alpha通道。
這個值始終是用#字元開頭,後面跟的是Appha-Red-Green-Blue資訊,格式如下:
#RGB
#ARGB
#RRGGBB
#AARRGGBB
android:state_pressed
一個布爾值,如果這個項目是在對象被按下時使用,那麼就要設定為true。(如,按鈕被觸摸或點擊時。)false應該用於預設的非按下狀態。
android:state_focused
一個布爾值,如果這個項目是在對象擷取焦點時使用,那麼就要設定為true。如,一個選項標籤被開啟時。如果這個項目要用於對象沒有被被選擇的時候,那麼就要設定為false。
android:state_checkable
一個布爾值,如果這個項目要用於對象的可選擇狀態,那麼就要設定為true。如果這個項目要用於不可選狀態,那麼就要設定為false。(它只用於一個對象在可選和不可選之間的轉換)。
android:state_checked
一個布爾值,如果這個項目要用於對象被勾選的時候,那麼就要設定為true。否者設為false。
android:state_enabled
一個布爾值,如果這個項目要用於對象可用狀態(接受觸摸或點擊事件的能力),那麼就要設定為true,否者設定為false。
android:state_window_focused
一個布爾值,如果這個項目要用於應用程式視窗的有焦點狀態(應用程式是在前台),那麼就要設定為true,否者設定false。
注意:要記住,狀態列表中一個與對象目前狀態匹配的項目會被使用。因此,如果列表中的第一項沒有包含以上任何一種狀態屬性,那麼每次都會使用這個項目,因此預設設定應該始終被放到最後。
例子(EXAMPLE):
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"/>