색상 상태 목록 리소스

ColorStateList는 XML로 정의할 수 있는 객체로 색상으로 적용할 수 있지만 실제로 색상이 적용되는 View 객체의 상태에 따라 색상을 변경합니다. 예를 들어, Button 위젯은 여러 다양한 상태(눌리거나 포커스가 있거나 혹은 둘 다 아닌 상태) 중 하나로 존재할 수 있으며 색상 상태 목록을 사용하여 각 상태에 다른 색상을 제공할 수 있습니다.

XML 파일에 상태 목록을 설명할 수 있습니다. 각 색상은 단일 <selector> 요소 내 <item> 요소에 정의됩니다. 각 <item>은 다양한 속성을 사용하여 색상이 사용되어야 하는 상태를 설명합니다.

각 상태가 변경되는 동안 상태 목록은 위에서 아래로 순회하고 현재 상태와 일치하는 첫 번째 항목이 사용됩니다. 선택 항목은 '가장 일치'하는 항목이 아니라 단순히 상태의 최소 기준을 충족하는 첫 번째 항목입니다.

참고: 정적 색상 리소스를 제공하려면 간단한 색상 값을 사용하세요.

파일 위치:
res/color/filename.xml
파일 이름이 리소스 ID로 사용됩니다.
컴파일된 리소스 데이터 유형:
ColorStateList를 가리키는 리소스 포인터입니다.
리소스 참조:
자바: 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>
필수사항. 이 요소는 루트 요소여야 합니다. 하나 이상의 <item> 요소를 포함합니다.

속성:

xmlns:android
문자열. 필수사항. XML 네임스페이스("http://schemas.android.com/apk/res/android"여야 함)를 정의합니다.
<item>
속성의 설명에 따라 특정 상태에서 사용할 색상을 정의합니다. <selector> 요소의 하위 요소여야 합니다.

속성:

android:color
16진수 색상. 필수사항. 색상은 RGB 값과 알파 채널(선택사항)을 사용하여 지정됩니다.

RGB 값은 항상 파운드(#) 문자로 시작하고 알파-빨간색-녹색-파란색 정보가 이어지는 다음 형식 중 하나로 지정됩니다.

  • #RGB
  • #ARGB
  • #RRGGBB
  • #AARRGGBB
android:state_pressed
부울. 객체가 눌렸을 때(예: 버튼을 터치하거나 클릭한 경우) 이 항목을 사용해야 한다면 'true'이며 기본값 즉, 버튼이 눌리지 않은 상태에서 이 항목을 사용해야 한다면 'false'입니다.
android:state_focused
부울. 객체에 포커스가 있을 때(예: 트랙볼/D패드를 사용하여 버튼이 강조표시된 경우) 이 항목을 사용해야 한다면 '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" />
    
참고 항목: