드로어블 리소스

드로어블 리소스는 화면에 그릴 수 있으며 getDrawable(int)와 같은 API를 사용하여 가져오거나 android:drawableandroid:icon과 같은 속성을 사용하여 다른 XML 리소스에 적용할 수 있는 그래픽에 관한 일반적인 개념입니다. 다음과 같이 다양한 유형의 드로어블이 있습니다.

비트맵 파일
비트맵 그래픽 파일(PNG, WEBP, JPG 또는 GIF). BitmapDrawable을 만듭니다.
나인 패치 파일
콘텐츠에 따라 이미지 크기를 조절할 수 있는 확장 가능한 영역이 포함된 PNG 파일(.9.png). NinePatchDrawable을 만듭니다.
계층 목록
다른 드로어블 배열을 관리하는 드로어블. 이 드로어블은 배열 순서대로 그려지므로, 가장 큰 색인을 갖는 요소가 맨 위에 그려집니다. LayerDrawable을 만듭니다.
상태 목록
상태별로 다른 비트맵 그래픽을 참조하는 XML 파일(예를 들어, 버튼을 누를 때 다른 이미지 사용). StateListDrawable을 만듭니다.
레벨 목록
대체 드로어블의 수를 관리하는 드로어블을 정의하는 XML 파일. 각 드로어블에는 최대 숫자 값이 할당됩니다. LevelListDrawable을 만듭니다.
전환 드로어블
두 개의 드로어블 리소스 간을 크로스 페이드할 수 있는 드로어블을 정의하는 XML 파일. TransitionDrawable을 만듭니다.
인셋 드로어블
지정된 거리만큼 다른 드로어블을 인셋하는 드로어블을 정의하는 XML 파일. 이 드로어블은 뷰가 뷰의 실제 범위보다 작은 배경 드로어블을 필요로 할 때 유용합니다.
클립 드로어블
이 드로어블의 현재 레벨 값을 기준으로 다른 드로어블을 클립하는 드로어블을 정의하는 XML 파일. ClipDrawable을 만듭니다.
배율 조정 드로어블
현재 레벨 값을 기준으로 다른 드로어블의 크기를 변경하는 드로어블을 정의하는 XML 파일. ScaleDrawable을 만듭니다.
도형 드로어블
색상과 그라데이션을 포함하여 기하학적 도형을 정의하는 XML 파일. GradientDrawable을 만듭니다.

AnimationDrawable을 만드는 방법에 관한 자세한 내용은 애니메이션 리소스 문서를 참고하세요.

참고: 색상 리소스를 XML에서 드로어블로 사용할 수도 있습니다. 예를 들어, 상태 목록 드로어블을 생성할 때 android:drawable 속성에 대한 색상 리소스(android:drawable="@color/green")를 참조할 수 있습니다.

비트맵

비트맵 이미지. Android는 PNG(권장), WEBP(권장, API 수준 17 이상 필요), JPG(허용), GIF(권장되지 않음) 형식의 비트맵 파일을 지원합니다.

파일 이름을 리소스 ID로 사용하여 비트맵 파일을 직접 참조하거나 XML에 별칭 리소스 ID를 생성할 수 있습니다.

참고: 비트맵 파일은 빌드 프로세스 과정에서 aapt 도구에 의해 무손실 이미지 압축을 사용하여 자동으로 최적화될 수 있습니다. 예를 들어, 256색을 초과하는 색상을 필요로 하지 않는 트루 컬러 PNG는 색상 팔레트를 사용하여 8비트 PNG로 변환될 수 있습니다. 이 경우 품질은 동일하지만 더 적은 메모리를 필요로 하는 이미지가 생성됩니다.

따라서 빌드 과정에서 이 디렉터리에 위치한 이미지 바이너리가 변경될 수 있다는 점에 유의해야 합니다. 이미지를 비트맵으로 변환하기 위해 비트 스트림으로 읽으려는 경우 이미지를 res/raw/ 폴더에 대신 저장하세요. 이 폴더에서는 이미지가 최적화되지 않습니다.

비트맵 파일

비트맵 파일은 PNG, WEBP, JPG 또는 GIF 파일입니다. Android는 res/drawable/ 디렉터리에 이러한 파일을 저장할 때 이들 파일 모두에 대해 Drawable 리소스를 생성합니다.

파일 위치:
res/drawable/filename.png(.png, .webp, .jpg 또는 .gif)
파일 이름이 리소스 ID로 사용됩니다.
컴파일된 리소스 데이터 유형:
BitmapDrawable을 가리키는 리소스 포인터입니다.
리소스 참조:
Java의 경우: R.drawable.filename
XML의 경우: @[package:]drawable/filename
예:
다음 레이아웃 XML은 res/drawable/myimage.png에 저장된 이미지를 사용하여 이미지를 뷰에 적용합니다.
<ImageView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/myimage" />

다음 애플리케이션 코드는 이미지를 Drawable로 가져옵니다.

Kotlin

val drawable: Drawable? = ResourcesCompat.getDrawable(resources, R.drawable.myimage, null)

Java

Resources res = getResources();
Drawable drawable = ResourcesCompat.getDrawable(res, R.drawable.myimage, null);
참고 항목:

XML 비트맵

XML 비트맵은 비트맵 파일을 가리키는, XML에 정의된 리소스입니다. 이 효과는 원시 비트맵 파일의 별칭입니다. XML은 디더링 및 타일링과 같은 비트맵 관련 추가 속성을 지정할 수 있습니다.

참고: <bitmap> 요소를 <item> 요소의 하위 요소로 사용할 수 있습니다. 예를 들어, 상태 목록이나 계층 목록을 생성할 때 <item> 요소에서 android:drawable 속성을 제외하고 이 요소 내에 드로어블 항목을 정의하는 <bitmap>을 중첩할 수 있습니다.

파일 위치:
res/drawable/filename.xml
파일 이름이 리소스 ID로 사용됩니다.
컴파일된 리소스 데이터 유형:
BitmapDrawable을 가리키는 리소스 포인터입니다.
리소스 참조:
Java의 경우: R.drawable.filename
XML의 경우: @[package:]drawable/filename
문법:
<?xml version="1.0" encoding="utf-8"?>
<bitmap
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@[package:]drawable/drawable_resource"
    android:antialias=["true" | "false"]
    android:dither=["true" | "false"]
    android:filter=["true" | "false"]
    android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                      "fill_vertical" | "center_horizontal" | "fill_horizontal" |
                      "center" | "fill" | "clip_vertical" | "clip_horizontal"]
    android:mipMap=["true" | "false"]
    android:tileMode=["disabled" | "clamp" | "repeat" | "mirror"] />
요소:
<bitmap>
필수사항. 비트맵 소스와 해당 속성을 정의합니다.

속성:

xmlns:android
문자열. XML 네임스페이스("http://schemas.android.com/apk/res/android"여야 함)를 정의합니다. <bitmap>이 루트 요소인 경우에만 필요합니다. <bitmap><item> 내에 중첩되어 있는 경우에는 필요하지 않습니다.
android:src
드로어블 리소스. 필수사항. 드로어블 리소스에 대한 참조입니다.
android:antialias
부울. 앤티앨리어싱을 사용 설정하거나 사용 중지합니다.
android:dither
부울. 비트맵에 화면과 동일한 픽셀 구성이 없는 경우(예: RGB 565 화면에 ARGB 8888 비트맵 설정) 비트맵에 관한 디더링을 사용 설정하거나 중지합니다.
android:filter
부울. 비트맵 필터링을 사용 설정하거나 중지합니다. 필터링은 모양을 매끄럽게 하기 위해 비트맵을 축소하거나 확장할 때 사용합니다.
android:gravity
키워드. 비트맵에 관한 중력을 정의합니다. 중력은 비트맵이 컨테이너보다 작은 경우 컨테이너에서 드로어블을 배치할 위치를 나타냅니다.

다음 상숫값 중 하나 이상(|로 구분됨)이어야 합니다.

설명
top 객체의 크기를 변경하지 않고 컨테이너의 상단에 객체를 배치합니다.
bottom 객체의 크기를 변경하지 않고 컨테이너의 하단에 객체를 배치합니다.
left 객체의 크기를 변경하지 않고 컨테이너의 왼쪽 가장자리에 객체를 배치합니다.
right 객체의 크기를 변경하지 않고 컨테이너의 오른쪽 가장자리에 객체를 배치합니다.
center_vertical 객체의 크기를 변경하지 않고 컨테이너의 세로 가운데에 객체를 배치합니다.
fill_vertical 객체가 컨테이너를 완전히 채우도록 필요한 경우 객체의 세로 크기를 늘립니다.
center_horizontal 객체의 크기를 변경하지 않고 컨테이너의 가로 가운데에 객체를 배치합니다.
fill_horizontal 객체가 컨테이너를 완전히 채우도록 필요한 경우 객체의 가로 크기를 늘립니다.
center 객체의 크기를 변경하지 않고 가로축과 세로축 모두에서 컨테이너의 가운데에 객체를 배치합니다.
fill 객체가 컨테이너를 완전히 채우도록 필요한 경우 객체의 가로 크기와 세로 크기를 늘립니다. 이는 기본값입니다.
clip_vertical 하위 요소의 상단 또는 하단 가장자리가 컨테이너 범위에 맞게 클립되도록 하기 위해 설정할 수 있는 추가 옵션입니다. 클립은 세로 중력을 기준으로 합니다. 상단 중력은 하단 가장자리를 클립하고, 하단 중력은 상단 가장자리를 클립하며, 두 가장자리를 모두 클립하는 중력은 없습니다.
clip_horizontal 하위 요소의 왼쪽 또는 오른쪽 가장자리가 컨테이너 범위에 맞게 클립되도록 하기 위해 설정할 수 있는 추가 옵션입니다. 클립은 가로 중력을 기준으로 합니다. 왼쪽 중력은 오른쪽 가장자리를 클립하고, 오른쪽 중력은 왼쪽 가장자리를 클립하고, 두 가장자리를 모두 클립하는 중력은 없습니다.
android:mipMap
부울. 밉맵 힌트를 사용 설정하거나 중지합니다. 자세한 내용은 setHasMipMap()을 참고하세요. 기본값은 false입니다.
android:tileMode
키워드. 타일 모드를 정의합니다. 타일 모드가 사용 설정된 경우 비트맵이 반복됩니다. 타일 모드가 사용 설정된 경우 중력이 무시됩니다.

다음 상숫값 중 하나여야 합니다.

설명
disabled 비트맵을 타일식으로 배치하지 않습니다. 기본값입니다.
clamp 셰이더가 원래 범위 외부에서 그리는 경우 가장자리 색을 복제합니다.
repeat 셰이더의 이미지를 가로와 세로로 반복합니다.
mirror 인접 이미지가 항상 이어지도록 미러 이미지를 번갈아 반복하여 셰이더의 이미지를 가로와 세로로 반복합니다.
예:
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/icon"
    android:tileMode="repeat" />
참고 항목:

나인 패치

NinePatch는 뷰 내부의 콘텐츠가 일반적인 이미지 범위를 초과할 때 Android가 배율을 조정하는 확장 가능한 영역을 정의할 수 있는 PNG 이미지입니다. 일반적으로 하나 이상의 크기가 "wrap_content"로 설정된 뷰의 배경으로 이 이미지 유형을 할당합니다.

뷰가 콘텐츠를 수용하도록 확장되면 나인 패치 이미지도 뷰의 크기에 맞게 배율이 조정됩니다. 나인 패치 이미지를 사용하는 경우로는 Android의 표준 Button 위젯이 사용하는 배경을 예로 들 수 있습니다. 이 배경은 버튼 내부의 텍스트(또는 이미지)를 수용하도록 확장되어야 합니다.

일반적인 비트맵과 마찬가지로, 나인 패치 파일을 직접 참조하거나 XML로 정의된 리소스에서 참조할 수 있습니다.

확장 가능한 영역이 있는 나인 패치 파일을 생성하는 방법에 관한 자세한 내용은 크기 조절 가능한 비트맵 만들기(9-패치 파일)를 참고하세요.

나인 패치 파일

파일 위치:
res/drawable/filename.9.png
파일 이름이 리소스 ID로 사용됩니다.
컴파일된 리소스 데이터 유형:
NinePatchDrawable을 가리키는 리소스 포인터입니다.
리소스 참조:
자바의 경우: R.drawable.filename
XML의 경우: @[package:]drawable/filename
예:
다음 레이아웃 XML은 res/drawable/myninepatch.9.png에 저장된 이미지를 사용하여 나인 패치를 뷰에 적용합니다.
<Button
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="@drawable/myninepatch" />
참고 항목:

XML 나인 패치

XML 나인 패치는 나인 패치 파일을 가리키는, XML에 정의된 리소스입니다. XML은 이미지에 관해 디더링을 지정할 수 있습니다.

파일 위치:
res/drawable/filename.xml
파일 이름이 리소스 ID로 사용됩니다.
컴파일된 리소스 데이터 유형:
NinePatchDrawable을 가리키는 리소스 포인터입니다.
리소스 참조:
자바의 경우: R.drawable.filename
XML의 경우: @[package:]drawable/filename
문법:
<?xml version="1.0" encoding="utf-8"?>
<nine-patch
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@[package:]drawable/drawable_resource"
    android:dither=["true" | "false"] />
요소:
<nine-patch>
필수사항. 나인 패치 소스와 해당 속성을 정의합니다.

속성:

xmlns:android
문자열. 필수사항. XML 네임스페이스("http://schemas.android.com/apk/res/android"여야 함)를 정의합니다.
android:src
드로어블 리소스. 필수사항. 나인 패치 파일에 대한 참조입니다.
android:dither
부울. 비트맵에 화면과 동일한 픽셀 구성이 없는 경우(예: RGB 565 화면에 ARGB 8888 비트맵 설정) 비트맵에 관한 디더링을 사용 설정하거나 중지합니다.
예:
<?xml version="1.0" encoding="utf-8"?>
<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/myninepatch"
    android:dither="false" />

계층 목록

LayerDrawable은 다른 드로어블로 구성된 배열을 관리하는 드로어블 객체입니다. 목록에 포함된 각 드로어블은 목록에 나열된 순서대로 그려집니다. 즉, 목록에서 맨 마지막에 있는 드로어블이 맨 위에 그려집니다.

각 드로어블은 단일 <layer-list> 요소 내에 있는 <item> 요소로 표현됩니다.

파일 위치:
res/drawable/filename.xml
파일 이름이 리소스 ID로 사용됩니다.
컴파일된 리소스 데이터 유형:
LayerDrawable을 가리키는 리소스 포인터입니다.
리소스 참조:
자바의 경우: R.drawable.filename
XML의 경우: @[package:]drawable/filename
문법:
<?xml version="1.0" encoding="utf-8"?>
<layer-list
    xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@[package:]drawable/drawable_resource"
        android:id="@[+][package:]id/resource_name"
        android:top="dimension"
        android:right="dimension"
        android:bottom="dimension"
        android:left="dimension" />
</layer-list>
요소:
<layer-list>
필수사항. 이 요소는 루트 요소여야 합니다. 하나 이상의 <item> 요소를 포함합니다.

속성:

xmlns:android
문자열. 필수사항. XML 네임스페이스("http://schemas.android.com/apk/res/android"여야 함)를 정의합니다.
<item>
계층 드로어블에서 해당 속성으로 정의된 위치에 배치할 드로어블을 정의합니다. <layer-list> 요소의 하위 요소여야 합니다. 하위 <bitmap> 요소를 수용합니다.

속성:

android:drawable
드로어블 리소스. 필수사항. 드로어블 리소스에 대한 참조입니다.
android:id
리소스 ID. 이 드로어블에 고유한 리소스 ID입니다. 이 항목의 새 리소스 ID를 만들려면 "@+id/name" 형식을 사용합니다. 더하기 기호는 새 ID로 생성되었음을 나타냅니다. View.findViewById() 또는 Activity.findViewById()에 이 식별자를 사용하여 드로어블을 가져오고 수정할 수 있습니다.
android:top
크기. 크기 값 또는 크기 리소스로 표시되는 상단 오프셋입니다.
android:right
크기. 크기 값 또는 크기 리소스로 표시되는 오른쪽 오프셋입니다.
android:bottom
크기. 크기 값 또는 크기 리소스로 표시되는 하단 오프셋입니다.
android:left
크기. 크기 값 또는 크기 리소스로 표시되는 왼쪽 오프셋입니다.

모든 드로어블 항목은 기본적으로 포함하는 뷰의 크기에 맞도록 배율이 조정됩니다. 따라서, 이미지를 계층 목록에서 다른 위치에 배치하면 뷰의 크기가 늘어날 수 있으며, 이에 따라 일부 이미지의 배율이 적절하게 조정됩니다.

목록에 포함된 항목의 배율이 조정되지 않도록 하려면 <item> 요소 내부에 <bitmap> 요소를 사용하여 드로어블을 지정하고 배율이 조정되지 않는 설정(예: "center")으로 중력을 정의합니다. 예를 들어, 다음 <item>은 해당 컨테이너 뷰에 맞게 배율이 조정되는 항목을 정의합니다.

<item android:drawable="@drawable/image" />

배율 조정을 방지하기 위해 다음 예에서는 가운데 중력을 설정한 상태로 <bitmap> 요소를 사용합니다.

<item>
  <bitmap android:src="@drawable/image"
          android:gravity="center" />
</item>
예:
res/drawable/layers.xml에 저장된 XML 파일:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
      <bitmap android:src="@drawable/android_red"
        android:gravity="center" />
    </item>
    <item android:top="10dp" android:left="10dp">
      <bitmap android:src="@drawable/android_green"
        android:gravity="center" />
    </item>
    <item android:top="20dp" android:left="20dp">
      <bitmap android:src="@drawable/android_blue"
        android:gravity="center" />
    </item>
</layer-list>

이 예에서는 중첩된 <bitmap> 요소를 사용하여 "center" 중력을 설정한 상태로 각 항목에 대해 드로어블 리소스를 정의하는 것을 알 수 있습니다. 오프셋 이미지로 인해 배율 조정이 발생하기 때문에 이렇게 하면 이미지의 크기가 컨테이너 크기에 맞게 조정되지 않습니다.

다음 레이아웃 XML은 드로어블을 뷰에 적용합니다.

<ImageView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/layers" />

생성되는 결과는 점점 커지는 오프셋 이미지의 스택입니다.

참고 항목:

상태 목록

StateListDrawable은 객체의 상태에 따라 여러 개의 이미지를 사용하여 동일한 그래픽을 나타내는 XML에 정의된 드로어블 객체입니다. 예를 들어 Button 위젯의 상태는 눌린 상태, 포커스가 있는 상태 또는 둘 다에 해당하지 않는 상태일 수 있습니다. 개발자는 상태 목록 드로어블을 사용하여 상태별로 각각 다른 배경 이미지를 제공할 수 있습니다.

XML 파일에 상태 목록을 설명할 수 있습니다. 각 그래픽은 단일 <selector> 요소 내에 있는 <item> 요소로 표현됩니다. 각 <item>은 다양한 속성을 사용하여 드로어블 그래픽으로 사용되는 상태를 설명합니다.

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

파일 위치:
res/drawable/filename.xml
파일 이름이 리소스 ID로 사용됩니다.
컴파일된 리소스 데이터 유형:
StateListDrawable을 가리키는 리소스 포인터입니다.
리소스 참조:
자바의 경우: R.drawable.filename
XML의 경우: @[package:]drawable/filename
문법:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
    android:constantSize=["true" | "false"]
    android:dither=["true" | "false"]
    android:variablePadding=["true" | "false"] >
    <item
        android:drawable="@[package:]drawable/drawable_resource"
        android:state_pressed=["true" | "false"]
        android:state_focused=["true" | "false"]
        android:state_hovered=["true" | "false"]
        android:state_selected=["true" | "false"]
        android:state_checkable=["true" | "false"]
        android:state_checked=["true" | "false"]
        android:state_enabled=["true" | "false"]
        android:state_activated=["true" | "false"]
        android:state_window_focused=["true" | "false"] />
</selector>
요소:
<selector>
필수사항. 이 요소는 루트 요소여야 합니다. 하나 이상의 <item> 요소를 포함합니다.

속성:

xmlns:android
문자열. 필수사항. XML 네임스페이스("http://schemas.android.com/apk/res/android"여야 함)를 정의합니다.
android:constantSize
부울. 상태가 변경될 때 드로어블의 보고된 내부 크기가 일정하게 유지되는 경우 'true'입니다(크기는 모든 상태의 최댓값임). 크기가 현재 상태에 따라 달라지면 'false'입니다. 기본값은 false입니다.
android:dither
부울. 비트맵에 화면과 동일한 픽셀 구성이 없는 경우(예: RGB 565 화면에 ARGB 8888 비트맵 설정) 비트맵의 디더링을 사용 설정하려면 'true'이고 디더링을 중지하려면 'false'입니다. 기본값은 true입니다.
android:variablePadding
부울. 드로어블의 패딩이 선택된 현재 상태에 따라 변경되어야 하는 경우 'true'입니다. 패딩이 동일하게 유지되어야 하는 경우(모든 상태의 최대 패딩에 따라) 'false'입니다. 이 기능을 사용 설정하려면 상태가 변경될 때 실행 중인 레이아웃을 처리해야 합니다. 이는 보통 지원되지 않습니다. 기본값은 false입니다.
<item>
속성으로 규정된 대로, 특정 상태 동안 사용할 드로어블을 정의합니다. <selector> 요소의 하위 요소여야 합니다.

속성:

android:drawable
드로어블 리소스. 필수사항. 드로어블 리소스에 대한 참조입니다.
android:state_pressed
부울. 객체가 눌렸을 때(예: 버튼을 터치한 경우) 이 항목을 사용해야 한다면 'true'이며 기본값 즉, 버튼이 눌리지 않은 상태에서 이 항목을 사용해야 한다면 'false'입니다.
android:state_focused
부울. 객체에 입력 포커스가 있을 때(예: 사용자가 텍스트 입력을 선택할 때) 이 항목을 사용해야 하는 경우 'true'이고 이 항목을 포커스가 없는 기본 상태에서 사용해야 하면 'false'입니다.
android:state_hovered
부울. 객체에 마우스 오버할 때 이 항목을 사용해야 하는 경우 'true'입니다. 마우스 오버하지 않은 기본 상태에서 항목을 사용해야 하는 경우 'false'입니다. 종종 이 드로어블은 '포커스가 있는' 상태에 사용된 것과 동일한 드로어블일 수 있습니다.

API 수준 14에 도입되었습니다.

android:state_selected
부울. 방향 컨트롤을 사용하여 탐색할 때(예: D패드를 사용하여 목록을 탐색할 때) 객체가 현재 사용자가 선택한 항목일 때 이 항목을 사용하려는 경우 'true'이고, 객체가 선택되지 않았을 때 이 항목을 사용하려는 경우 'false'입니다.

포커스(android:state_focused)가 충분하지 않은 경우(예: 목록 보기에 포커스가 있고 뷰 내부의 항목이 D패드를 사용하여 선택된 경우) 선택된 상태가 사용됩니다.

android:state_checkable
부울. 객체가 선택 가능할 때 이 항목을 사용해야 한다면 'true'이고, 객체가 선택 가능하지 않을 때 이 항목을 사용해야 한다면 'false'입니다. 객체가 선택 가능한 위젯과 선택 가능하지 않은 위젯 간에 전환이 가능한 경우에만 유용합니다.
android:state_checked
부울. 객체가 선택됐을 때 이 항목을 사용해야 한다면 'true'이고, 객체가 선택되지 않았을 때 이 항목을 사용해야 한다면 'false'입니다.
android:state_enabled
부울. 객체가 사용 설정될 때(터치 또는 클릭 이벤트를 수신할 수 있을 때) 이 항목을 사용해야 한다면 'true'이고, 객체가 사용 중지될 때 이 항목을 사용해야 한다면 'false'입니다.
android:state_activated
부울. 객체가 영구 선택으로 활성화될 때(예: 영구 탐색 뷰에서 이전에 선택한 목록 항목을 '강조표시'하기 위해) 이 항목을 사용해야 하는 경우 'true'이고, 객체가 활성화되지 않았을 때 사용해야 하면 'false'입니다.

API 수준 11에 도입되었습니다.

android:state_window_focused
부울. 애플리케이션 창에 포커스가 있을 때(애플리케이션이 포그라운드에 있을 때) 이 항목을 사용해야 한다면 'true'이고, 애플리케이션 창에 포커스가 없을 때(예: 알림 창이 풀다운되거나 대화상자가 표시됨) 이 항목을 사용해야 한다면 'false'입니다.

참고: Android에서는 상태 목록에서 객체의 현재 상태와 일치하는 첫 번째 항목을 적용합니다. 목록의 첫 번째 항목에 위에 나와 있는 상태 속성이 포함되어 있지 않으면 이 항목이 매번 적용됩니다. 따라서 아래 예에 나온 것처럼 항상 기본값을 마지막에 유지해야 합니다.

예:
res/drawable/button.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:drawable="@drawable/button_pressed" /> <!-- pressed -->
    <item android:state_focused="true"
          android:drawable="@drawable/button_focused" /> <!-- focused -->
    <item android:state_hovered="true"
          android:drawable="@drawable/button_focused" /> <!-- hovered -->
    <item android:drawable="@drawable/button_normal"