色状態リストのリソース

ColorStateList は色として適用できるオブジェクトで、XML 内で定義します。適用対象となる View オブジェクトの状態に応じて、実際に色を変更します。たとえば、Button ウィジェットの場合、さまざまな状態があり(押されている状態、フォーカスされている状態、どちらでもない状態)、色状態リストを使用することで、状態ごとに別の色で表示することができます。

状態リストは XML ファイル内で記述できます。各色は、単一の <selector> 要素内の <item> 要素で定義します。各 <item> 内で、さまざまな属性を使用して、使用対象となる状態を記述します。

状態が変化するたびに、状態リストが上から下にトラバースされ、現在の状態に合致する最初のアイテムが使用されます。「ベストマッチ」に基づく選択ではなく、単純に、対象状態の最小基準を満たす最初のアイテムが選択されます。

注: 静的なカラーリソースを提供する場合は、単純なの値を使用してください。

ファイルの場所:
res/color/filename.xml
filename はリソース 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
ブール値。オブジェクトがフォーカスされているとき(トラックボール / 十字キーを使用してボタンをハイライト表示したときなど)にこのアイテムを使用する場合は「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 によって、ビューに色のリストが適用されます。

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/button_text"
    android:textColor="@color/button_text" />
関連項目: