顏色狀態清單資源

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
布林值。如果此項目是在聚焦物件時使用 (例如使用軌跡球或 D-Pad 醒目顯示按鈕時),則為 "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" />
另請參閱: