Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

カラー状態リストリソース

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: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: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」に設定します。

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

例:
次の 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 によって、ビューにカラーリストが適用されます。

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