색상 상태 목록 리소스

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>
필수사항. 루트 요소입니다. 하나 이상의 <item> 요소를 포함합니다.

속성:

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

속성:

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

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

  • #RGB
  • #ARGB
  • #RRGGBB
  • #AARRGGBB
android:lStar
부동 소수점. 선택사항. 이 속성은 기본 색상의 인지 휘도를 수정합니다. 0과 100 사이의 부동 소수점 값 또는 이와 같이 결정되는 테마 속성을 사용합니다. 항목의 전체 색상은 기본 색상을 접근성 친화적인 색상 공간으로 변환하고 L*를 lStar 속성에 지정된 값으로 설정하여 계산됩니다.

예: android:lStar="50"

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은 색상 목록을 View에 적용합니다.

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/button_text"
    android:textColor="@color/button_text" />
참고 항목: