Android應用資源—狀態顏色列表(Color State List)

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"/>

 
摘自 FireOfStar的專欄

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。