色状態リストのリソース

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>
必須。これはルート要素です。1 つまたは複数の <item> 要素を格納します。

属性:

xmlns:android
文字列。必須。XML 名前空間を定義します。"http://schemas.android.com/apk/res/android" にします。
<item>
特定の状態で使用する色を定義します。色と状態については、各属性で指定します。<selector> 要素の子要素です。

属性:

android:color
16 進数色コード。必須。色は、RGB 値とオプションのアルファ チャンネルで指定します。

値は常に番号記号(「#」)で始め、その後に次のいずれかの形式で 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" に設定します。

注: 状態リストのアイテムの中で、オブジェクトの現在の状態に合致する最初のアイテムが適用されます。したがって、リスト内の最初のアイテムに上記の状態属性がいずれも含まれていない場合、そのアイテムが毎回適用されることになります。このため、デフォルト値は最後に配置します。下記の例をご覧ください。

例:
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" />
関連項目: