lightbulb_outline Help shape the future of the Google Play Console, Android Studio, and Firebase. Start survey

드로어블 리소스

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

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

AnimationDrawable을 생성하는 방법을 보려면 애니메이션 리소스 문서도 참조하세요.

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

비트맵

비트맵 이미지. Android는 .png(권장), .jpg(허용), .gif(권장 안 함) 등 세 가지 형식의 비트맵 파일을 지원합니다.

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

참고: 비트맵 파일은 빌드 프로세스 과정에서 aapt 도구에 의해 무손실 이미지 압축을 사용하여 자동으로 최적화될 수 있습니다. 예를 들어, 256색을 초과하는 색상을 필요로 하지 않는 트루 컬러 PNG는 색상 팔레트를 사용하여 8비트 PNG로 변환될 수 있습니다. 이 경우 품질은 동일하지만 더 적은 메모리를 필요로 하는 이미지가 생성됩니다. 따라서 빌드 과정에서 이 디렉터리에 위치한 이미지 바이너리가 변경될 수 있다는 점에 유의해야 합니다. 이미지를 비트맵으로 변환하기 위해 비트 스트림으로 읽으려는 경우 이미지를 res/raw/ 폴더에 대신 저장하십시오. 이 폴더에서는 이미지가 최적화되지 않습니다.

비트맵 파일

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

파일 위치:
res/drawable/filename.png(.png, .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로 가져옵니다.

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

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
부울. 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로 정의된 리소스에서 참조할 수 있습니다.

확장 가능한 영역이 있는 나인 패치 파일을 생성하는 방법에 대한 자세한 내용은 2D 그래픽 문서를 참조하세요.

나인 패치 파일

파일 위치:
res/drawable/filename.9.png
파일 이름이 리소스 ID로 사용됩니다.
컴파일된 리소스 데이터 유형:
NinePatchDrawable에 대한 리소스 포인터입니다.
리소스 참조:
Java: R.drawable.filename
XML: @[package:]drawable/filename
예:
res/drawable/myninepatch.9.png에 저장된 이미지를 사용하여 다음 레이아웃 XML은 나인 패치를 뷰에 적용합니다.
<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에 대한 리소스 포인터입니다.
리소스 참조:
Java: 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에 대한 리소스 포인터입니다.
리소스 참조:
Java: 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>
계층 드로어블에서 해당 속성으로 정의된 위치에 배치할 드로어블을 정의합니다. <selector> 요소의 하위 요소여야 합니다. 하위 <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> 요소를 사용하여 "가운데" 중력을 설정한 상태로 각 항목에 대해 드로어블 리소스를 정의하는 것을 알 수 있습니다. 오프셋 이미지로 인해 배율 조정이 발생하기 때문에 이렇게 하면 이미지의 크기가 컨테이너 크기에 맞게 조정되지 않습니다.

다음 레이아웃 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에 대한 리소스 포인터입니다.
리소스 참조:
Java: 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-pad)를 사용하여 목록을 탐색할 때) 객체가 현재 사용자가 선택한 항목일 때 이 항목을 사용하려는 경우 "true"이고, 객체가 선택되지 않았을 때 이 항목을 사용하려는 경우 "false"입니다.

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

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" /> <!-- default -->
</selector>

다음 레이아웃 XML은 상태 목록 드로어블을 버튼에 적용합니다.

<Button
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="@drawable/button" />
참고 항목:

레벨 목록

대체 드로어블의 수를 관리하는 드로어블이며, 각 드로어블에는 최대 숫자 값이 할당됩니다. setLevel()을 사용하여 드로어블의 레벨 값을 설정하면 상태 목록에서 android:maxLevel 값이 메서드에 전달된 값보다 크거나 같은 드로어블 리소스가 로드됩니다.

파일 위치:
res/drawable/filename.xml
파일 이름이 리소스 ID로 사용됩니다.
컴파일된 리소스 데이터 유형:
LevelListDrawable에 대한 리소스 포인터입니다.
리소스 참조:
Java: R.drawable.filename
XML: @[package:]drawable/filename
구문:
<?xml version="1.0" encoding="utf-8"?>
<level-list
    xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@drawable/drawable_resource"
        android:maxLevel="integer"
        android:minLevel="integer" />
</level-list>
요소:
<level-list>
이는 루트 요소여야 합니다. 하나 이상의 <item> 요소를 포함합니다.

특성:

xmlns:android
문자열. 필수. XML 네임스페이스를 정의합니다. 이는 "http://schemas.android.com/apk/res/android"여야 합니다.
<item>
특정 레벨에서 사용할 드로어블을 정의합니다.

특성:

android:drawable
드로어블 리소스. 필수. 인셋할 드로어블 리소스에 대한 참조입니다.
android:maxLevel
정수. 이 항목에 허용되는 최대 레벨입니다.
android:minLevel
정수. 이 항목에 허용되는 최소 레벨입니다.
예:
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@drawable/status_off"
        android:maxLevel="0" />
    <item
        android:drawable="@drawable/status_on"
        android:maxLevel="1" />
</level-list>

이 항목을 View에 적용한 후에는 setLevel() 또는 setImageLevel()을 사용하여 레벨을 변경할 수 있습니다.

참고 항목:

전환 드로어블

TransitionDrawable은 두 개의 드로어블 리소스 간을 크로스 페이드할 수 있는 드로어블 객체입니다.

각 드로어블은 단일 <transition> 요소 내에 있는 <item> 요소로 표현됩니다. 항목은 두 개까지만 지원됩니다. 정방향 전환을 실행하려면 startTransition()을 호출합니다. 역방향 전환을 실행하려면 reverseTransition()을 호출합니다.

파일 위치:
res/drawable/filename.xml
파일 이름이 리소스 ID로 사용됩니다.
컴파일된 리소스 데이터 유형:
TransitionDrawable에 대한 리소스 포인터입니다.
리소스 참조:
Java: R.drawable.filename
XML: @[package:]drawable/filename
구문:
<?xml version="1.0" encoding="utf-8"?>
<transition
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" />
</transition>
요소:
<transition>
필수. 이는 루트 요소여야 합니다. 하나 이상의 <item> 요소를 포함합니다.

특성:

xmlns:android
문자열. 필수. XML 네임스페이스를 정의합니다. 이는 "http://schemas.android.com/apk/res/android"여야 합니다.
<item>
드로어블 전환의 일부로 사용할 드로어블을 정의합니다. <transition> 요소의 하위 요소여야 합니다. 하위 <bitmap> 요소를 받아들입니다.

특성:

android:drawable
드로어블 리소스. 필수. 드로어블 리소스에 대한 참조입니다.
android:id
리소스 ID. 이 드로어블에 고유한 리소스 ID입니다. 이 항목에 대한 새 리소스 ID를 생성하려면 "@+id/name" 형식을 사용하세요. 더하기 기호는 새 ID로 생성되었음을 나타냅니다. View.findViewById() 또는 Activity.findViewById()에 이 식별자를 사용하여 드로어블을 가져오고 수정할 수 있습니다.
android:top
정수. 픽셀 단위의 상단 오프셋입니다.
android:right
정수. 픽셀 단위의 오른쪽 오프셋입니다.
android:bottom
정수. 픽셀 단위의 하단 오프셋입니다.
android:left
정수. 픽셀 단위의 왼쪽 오프셋입니다.
예:
res/drawable/transition.xml에 저장된 XML 파일:
<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/on" />
    <item android:drawable="@drawable/off" />
</transition>

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

<ImageButton
    android:id="@+id/button"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/transition" />

또한, 다음 코드는 첫 번재 항목에서 두 번째 항목으로 500ms 기간의 전환을 수행합니다.

ImageButton button = (ImageButton) findViewById(R.id.button);
TransitionDrawable drawable = (TransitionDrawable) button.getDrawable();
drawable.startTransition(500);
참고 항목:

인셋 드로어블

지정된 거리만큼 다른 드로어블을 인셋하는, XML에 정의된 드로어블입니다. 이 드로어블은 뷰가 뷰의 실제 범위보다 작은 백그라운드를 필요로 할 때 유용합니다.

파일 위치:
res/drawable/filename.xml
파일 이름이 리소스 ID로 사용됩니다.
컴파일된 리소스 데이터 유형:
InsetDrawable에 대한 리소스 포인터입니다.
리소스 참조:
Java: R.drawable.filename
XML: @[package:]drawable/filename
구문:
<?xml version="1.0" encoding="utf-8"?>
<inset
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:insetTop="dimension"
    android:insetRight="dimension"
    android:insetBottom="dimension"
    android:insetLeft="dimension" />
요소:
<inset>
인셋 드로어블을 정의합니다. 이는 루트 요소여야 합니다.

특성:

xmlns:android
문자열. 필수. XML 네임스페이스를 정의합니다. 이는 "http://schemas.android.com/apk/res/android"여야 합니다.
android:drawable
드로어블 리소스. 필수. 인셋할 드로어블 리소스에 대한 참조입니다.
android:insetTop
치수. 상단 인셋으로, 치수 값 또는 치수 리소스로 지정됩니다.
android:insetRight
치수. 오른쪽 인셋으로, 치수 값 또는 치수 리소스로 지정됩니다.
android:insetBottom
치수. 하단 인셋으로, 치수 값 또는 치수 리소스로 지정됩니다.
android:insetLeft
치수. 왼쪽 인셋으로, 치수 값 또는 치수 리소스로 지정됩니다.
예:
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/background"
    android:insetTop="10dp"
    android:insetLeft="10dp" />
참고 항목:

클립 드로어블

이 드로어블의 현재 레벨을 기준으로 다른 드로어블을 클립하는, XML에 정의된 드로어블입니다. 레벨을 기준으로 너비와 높이 차원에서 클립할 하위 드로어블의 수를 제어할 수 있을 뿐만 아니라, 중력을 설정하여 전체 컨테이너에서 배치되는 위치를 제어할 수도 있습니다. 진행률 표시줄과 같은 항목을 구현하는 데 가장 많이 사용됩니다.

파일 위치:
res/drawable/filename.xml
파일 이름이 리소스 ID로 사용됩니다.
컴파일된 리소스 데이터 유형:
ClipDrawable에 대한 리소스 포인터입니다.
리소스 참조:
Java: R.drawable.filename
XML: @[package:]drawable/filename
구문:
<?xml version="1.0" encoding="utf-8"?>
<clip
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:clipOrientation=["horizontal" | "vertical"]
    android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                     "fill_vertical" | "center_horizontal" | "fill_horizontal" |
                     "center" | "fill" | "clip_vertical" | "clip_horizontal"] />
요소:
<clip>
클립 드로어블을 정의합니다. 이는 루트 요소여야 합니다.

특성:

xmlns:android
문자열. 필수. XML 네임스페이스를 정의합니다. 이는 "http://schemas.android.com/apk/res/android"여야 합니다.
android:drawable
드로어블 리소스. 필수. 클립할 드로어블 리소스에 대한 참조입니다.
android:clipOrientation
키워드. 클립 방향입니다.

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

설명
horizontal 드로어블을 가로로 클립합니다.
vertical 드로어블을 세로로 클릭합니다.
android:gravity
키워드. 드로어블 내에서 클립할 위치를 지정합니다.

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

설명
top 객체의 크기를 변경하지 않고 컨테이너의 상단에 객체를 배치합니다. clipOrientation"vertical"이면 드로어블의 하단에서 클립이 수행됩니다.
bottom 객체의 크기를 변경하지 않고 컨테이너의 하단에 객체를 배치합니다. clipOrientation"vertical"이면 드로어블의 상단에서 클립이 수행됩니다.
left 객체의 크기를 변경하지 않고 컨테이너의 왼쪽 가장자리에 객체를 배치합니다. 이는 기본값입니다. clipOrientation"horizontal"이면 드로어블의 오른쪽에서 클립이 수행됩니다. 이는 기본값입니다.
right 객체의 크기를 변경하지 않고 컨테이너의 오른쪽 가장자리에 객체를 배치합니다. clipOrientation"horizontal"이면 드로어블의 왼쪽에서 클립이 수행됩니다.
center_vertical 객체의 크기를 변경하지 않고 컨테이너의 세로 가운데에 객체를 배치합니다. 중력이 "center"일 때와 동일하게 클립이 동작합니다.
fill_vertical 객체가 컨테이너를 완전히 채우도록 필요한 경우 객체의 세로 크기를 늘립니다. clipOrientation"vertical"이면 드로어블이 세로 공간을 채우므로 클립이 수행되지 않습니다(드로어블 레벨이 표시되지 않는 레벨인 0이 아닌 경우에 한함).
center_horizontal 객체의 크기를 변경하지 않고 컨테이너의 가로 가운데에 객체를 배치합니다. 중력이 "center"일 때와 동일하게 클립이 동작합니다.
fill_horizontal 객체가 컨테이너를 완전히 채우도록 필요한 경우 객체의 가로 크기를 늘립니다. clipOrientation"horizontal"이면 드로어블이 가로 공간을 채우므로 클립이 수행되지 않습니다(드로어블 레벨이 표시되지 않는 레벨인 0이 아닌 경우에 한함).
center 객체의 크기를 변경하지 않고 가로축과 세로축 모두에서 컨테이너의 가운데에 객체를 배치합니다. clipOrientation"horizontal"이면 왼쪽과 오른쪽에서 클립이 수행됩니다. clipOrientation"vertical"이면 상단과 하단에서 클립이 수행됩니다.
fill 객체가 컨테이너를 완전히 채우도록 필요한 경우 객체의 가로 크기와 세로 크기를 늘립니다. 드로어블이 가로 공간과 세로 공간을 채우므로 클립이 수행되지 않습니다(드로어블 레벨이 표시되지 않는 레벨인 0이 아닌 경우에 한함).
clip_vertical 하위 요소의 상단 및/또는 하단 가장자리가 컨테이너 범위에 맞게 클립되도록 하기 위해 설정할 수 있는 추가 옵션입니다. 클립은 세로 중력을 기준으로 합니다. 상단 중력은 하단 가장자리를 클립하고, 하단 중력은 상단 가장자리를 클립하며, 두 가장자리를 모두 클립하는 중력은 없습니다.
clip_horizontal 하위 요소의 왼쪽 및/또는 오른쪽 가장자리가 컨테이너 범위에 맞게 클립되도록 하기 위해 설정할 수 있는 추가 옵션입니다. 클립은 가로 중력을 기준으로 합니다. 왼쪽 중력은 오른쪽 가장자리를 클립하고, 오른쪽 중력은 왼쪽 가장자리를 클립하고, 두 가장자리를 모두 클립하는 중력은 없습니다.
예:
res/drawable/clip.xml에 저장된 XML 파일:
<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/android"
    android:clipOrientation="horizontal"
    android:gravity="left" />

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

<ImageView
    android:id="@+id/image"
    android:background="@drawable/clip"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content" />

다음 코드는 드로어블을 가져온 후 이미지가 점진적으로 표시되도록 클립 정도를 늘립니다.

ImageView imageview = (ImageView) findViewById(R.id.image);
ClipDrawable drawable = (ClipDrawable) imageview.getDrawable();
drawable.setLevel(drawable.getLevel() + 1000);

레벨을 늘리면 클립 정도가 줄어들고 이미지가 천천히 표시됩니다. 다음은 레벨이 7000인 경우입니다.

참고: 기본 레벨은 0이며, 이 경우 완전히 클립되므로 이미지가 표시되지 않습니다. 레벨이 10,000이면 이미지가 클립되지 않고 완전히 표시됩니다.

참고 항목:

배율 조정 드로어블

현재 레벨을 기준으로 다른 드로어블의 크기를 변경하는, XML에 정의된 드로어블입니다.

파일 위치:
res/drawable/filename.xml
파일 이름이 리소스 ID로 사용됩니다.
컴파일된 리소스 데이터 유형:
ScaleDrawable에 대한 리소스 포인터입니다.
리소스 참조:
Java: R.drawable.filename
XML: @[package:]drawable/filename
구문:
<?xml version="1.0" encoding="utf-8"?>
<scale
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:scaleGravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                          "fill_vertical" | "center_horizontal" | "fill_horizontal" |
                          "center" | "fill" | "clip_vertical" | "clip_horizontal"]
    android:scaleHeight="percentage"
    android:scaleWidth="percentage" />
요소:
<scale>
배율 조정 드로어블을 정의합니다. 이는 루트 요소여야 합니다.

특성:

xmlns:android
문자열. 필수. XML 네임스페이스를 정의합니다. 이는 "http://schemas.android.com/apk/res/android"여야 합니다.
android:drawable
드로어블 리소스. 필수. 드로어블 리소스에 대한 참조입니다.
android:scaleGravity
키워드. 배율 조정 후 중력 위치를 지정합니다.

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

설명
top 객체의 크기를 변경하지 않고 컨테이너의 상단에 객체를 배치합니다.
bottom 객체의 크기를 변경하지 않고 컨테이너의 하단에 객체를 배치합니다.
left 객체의 크기를 변경하지 않고 컨테이너의 왼쪽 가장자리에 객체를 배치합니다. 이는 기본값입니다.
right 객체의 크기를 변경하지 않고 컨테이너의 오른쪽 가장자리에 객체를 배치합니다.
center_vertical 객체의 크기를 변경하지 않고 컨테이너의 세로 가운데에 객체를 배치합니다.
fill_vertical 객체가 컨테이너를 완전히 채우도록 필요한 경우 객체의 세로 크기를 늘립니다.
center_horizontal 객체의 크기를 변경하지 않고 컨테이너의 가로 가운데에 객체를 배치합니다.
fill_horizontal 객체가 컨테이너를 완전히 채우도록 필요한 경우 객체의 가로 크기를 늘립니다.
center 객체의 크기를 변경하지 않고 가로축과 세로축 모두에서 컨테이너의 가운데에 객체를 배치합니다.
fill 객체가 컨테이너를 완전히 채우도록 필요한 경우 객체의 가로 크기와 세로 크기를 늘립니다.
clip_vertical 하위 요소의 상단 및/또는 하단 가장자리가 컨테이너 범위에 맞게 클립되도록 하기 위해 설정할 수 있는 추가 옵션입니다. 클립은 세로 중력을 기준으로 합니다. 상단 중력은 하단 가장자리를 클립하고, 하단 중력은 상단 가장자리를 클립하며, 두 가장자리를 모두 클립하는 중력은 없습니다.
clip_horizontal 하위 요소의 왼쪽 및/또는 오른쪽 가장자리가 컨테이너 범위에 맞게 클립되도록 하기 위해 설정할 수 있는 추가 옵션입니다. 클립은 가로 중력을 기준으로 합니다. 왼쪽 중력은 오른쪽 가장자리를 클립하고, 오른쪽 중력은 왼쪽 가장자리를 클립하고, 두 가장자리를 모두 클립하는 중력은 없습니다.
android:scaleHeight
퍼센트. 드로어블 범위에 대한 퍼센트로 표현되는, 배율 조정 높이입니다. 값의 형식은 XX%입니다. 예: 100%, 12.5% 등
android:scaleWidth
퍼센트. 드로어블 범위에 대한 퍼센트로 표현되는, 배율 조정 너비입니다. 값의 형식은 XX%입니다. 예: 100%, 12.5% 등
예:
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/logo"
    android:scaleGravity="center_vertical|center_horizontal"
    android:scaleHeight="80%"
    android:scaleWidth="80%" />
참고 항목:

셰이프 드로어블

XML에 정의된 일반 셰이프입니다.

파일 위치:
res/drawable/filename.xml
파일 이름이 리소스 ID로 사용됩니다.
컴파일된 리소스 데이터 유형:
GradientDrawable에 대한 리소스 포인터입니다.
리소스 참조:
Java: R.drawable.filename
XML: @[package:]drawable/filename
구문:
<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape=["rectangle" | "oval" | "line" | "ring"] >
    <corners
        android:radius="integer"
        android:topLeftRadius="integer"
        android:topRightRadius="integer"
        android:bottomLeftRadius="integer"
        android:bottomRightRadius="integer" />
    <gradient
        android:angle="integer"
        android:centerX="float"
        android:centerY="float"
        android:centerColor="integer"
        android:endColor="color"
        android:gradientRadius="integer"
        android:startColor="color"
        android:type=["linear" | "radial" | "sweep"]
        android:useLevel=["true" | "false"] />
    <padding
        android:left="integer"
        android:top="integer"
        android:right="integer"
        android:bottom="integer" />
    <size
        android:width="integer"
        android:height="integer" />
    <solid
        android:color="color" />
    <stroke
        android:width="integer"
        android:color="color"
        android:dashWidth="integer"
        android:dashGap="integer" />
</shape>
요소:
<shape>
셰이프 드로어블입니다. 이는 루트 요소여야 합니다.

특성:

xmlns:android
문자열. 필수. XML 네임스페이스를 정의합니다. 이는 "http://schemas.android.com/apk/res/android"여야 합니다.
android:shape
키워드. 셰이프의 유형을 정의합니다. 유효한 값은 다음과 같습니다.
설명
"rectangle" 포함하는 뷰를 채우는 사각형. 이는 기본 셰이프입니다.
"oval" 포함하는 뷰의 치수에 맞는 타원형 셰이프.
"line" 포함하는 뷰의 너비에 걸쳐 있는 가로선. 이 셰이프를 사용하려면 <stroke> 요소를 통해 선의 너비를 정의해야 합니다.
"ring" 고리형 셰이프.

다음 속성은 android:shape="ring"인 경우에만 사용됩니다.

android:innerRadius
치수. 고리(가운데에 구멍이 있음) 내부의 반경으로, 치수 값이나 치수 리소스로 지정됩니다.
android:innerRadiusRatio
부동 소수점 수. 고리 내부의 반경으로, 고리 너비에 대한 비율로 표현됩니다. 예를 들어, android:innerRadiusRatio="5"이면 내부 반경이 고리 너비를 5로 나눈 값과 동일합니다. 이 값은 android:innerRadius로 재정의됩니다. 기본값은 9입니다.
android:thickness
치수. 고리의 두께로, 치수 값이나 치수 리소스로 지정됩니다.
android:thicknessRatio
부동 소수점 수. 고리의 두께로, 고리 너비에 대한 비율로 표현됩니다. 예를 들어, android:thicknessRatio="2"이면 두께가 고리 너비를 2로 나눈 값과 동일합니다. 이 값은 android:innerRadius로 재정의됩니다. 기본값은 3입니다.
android:useLevel
부울. LevelListDrawable로 사용되는 경우 "true"입니다. 일반적으로 "false"여야 하고, 그렇지 않은 경우 셰이프가 나타나지 않을 수 있습니다.
<corners>
셰이프에 대해 둥근 모서리를 생성합니다. 셰이프가 사각형인 경우에만 적용됩니다.

특성:

android:radius
치수. 모든 모서리의 반경으로, 치수 값이나 치수 리소스로 지정됩니다. 이 값은 각 모서리에 대해 다음 속성으로 재정의됩니다.
android:topLeftRadius
치수. 왼쪽 상단 모서리의 반경으로, 치수 값이나 치수 리소스로 지정됩니다.
android:topRightRadius
치수. 오른쪽 상단 모서리의 반경으로, 치수 값이나 치수 리소스로 지정됩니다.
android:bottomLeftRadius
치수. 왼쪽 하단 모서리의 반경으로, 치수 값이나 치수 리소스로 지정됩니다.
android:bottomRightRadius
치수. 오른쪽 하단 모서리의 반경으로, 치수 값이나 치수 리소스로 지정됩니다.

참고: 모든 모서리는 (초기에) 1보다 큰 모서리 반경을 제공해야 하며, 그렇지 않을 경우 모서리가 둥글게 처리되지 않습니다. 특정 모서리를 둥글게 처리하지 않으려는 경우, 해결 방법은 android:radius를 사용하여 1보다 큰 기본 모서리 반경을 설정하는 것입니다. 단, 그런 다음 각 모서리를 원하는 값으로 재정의하고 둥글게 처리하지 않을 모서리에 대해서는 0("0dp")을 지정합니다.

<gradient>
셰이프에 대한 그라데이션 색상을 지정합니다.

특성:

android:angle
정수. 그라데이션의 각도(단위: 도)입니다. 0은 왼쪽에서 오른쪽으로 진행되며, 90은 하단에서 상단으로 진행됩니다. 45의 배수여야 합니다. 기본값은 0입니다.
android:centerX
부동 소수점 수. 그라데이션의 중심에 대한 상대적인 X 위치입니다(0 ~ 1.0).
android:centerY
부동 소수점 수. 그라데이션의 중심에 대한 상대적인 Y 위치입니다(0 ~ 1.0).
android:centerColor
색상. 시작 색상과 끝 색상 사이에 오는 색상(선택 항목)으로, 16진수 값이나 색상 리소스로 지정됩니다.
android:endColor
색상. 끝 색상으로, 16진수 값이나 색상 리소스로 지정됩니다.
android:gradientRadius
부동 소수점 수. 그라데이션의 반경입니다. android:type="radial"인 경우에만 적용됩니다.
android:startColor
색상. 시작 색상으로, 16진수 값이나 색상 리소스로 지정됩니다.
android:type
키워드. 적용할 그라데이션 패턴의 유형입니다. 유효한 값은 다음과 같습니다.
설명
"linear" 선형 그라데이션. 이는 기본값입니다.
"radial" 원형 그라데이션. 시작 색상은 가운데 색상입니다.
"sweep" 스위핑 라인 그라데이션.
android:useLevel
부울. LevelListDrawable로 사용되는 경우 "true"입니다.
<padding>
포함하는 뷰 요소에 적용할 패딩입니다(이는 셰이프가 아니라 뷰 콘텐츠의 위치를 패딩함).

특성:

android:left
치수. 왼쪽 패딩으로, 치수 값이나 치수 리소스로 지정됩니다.
android:top
치수. 상단 패딩으로, 치수 값이나 치수 리소스로 지정됩니다.
android:right
치수. 오른쪽 패딩으로, 치수 값이나 치수 리소스로 지정됩니다.
android:bottom
치수. 하단 패딩으로, 치수 값이나 치수 리소스로 지정됩니다.
<size>
셰이프의 크기입니다.

특성:

android:height
치수. 셰이프의 높이로, 치수 값이나 치수 리소스로 지정됩니다.
android:width
치수. 셰이프의 너비로, 치수 값이나 치수 리소스로 지정됩니다.

참고: 셰이프는 기본적으로 여기에 정의된 치수에 비례하는 컨테이너 뷰 크기에 맞게 배율이 조정됩니다. ImageView에 셰이프를 사용할 경우 android:scaleType"center"로 설정하여 배율 조정을 제한할 수 있습니다.

<solid>
셰이프를 채울 단색입니다.

특성:

android:color
색상. 셰이프에 적용할 색상으로, 16진수 값이나 색상 리소스로 지정됩니다.
<stroke>
셰이프에 대한 스트로크 선입니다.

특성:

android:width
치수. 선의 두께로, 치수 값이나 치수 리소스로 지정됩니다.
android:color
색상. 선의 색상으로, 16진수 값이나 색상 리소스로 지정됩니다.
android:dashGap
치수. 점선 사이의 거리로, 치수 값이나 치수 리소스로 지정됩니다. android:dashWidth가 설정된 경우에만 유효합니다.
android:dashWidth
치수. 각 점선의 크기로, 치수 값이나 치수 리소스로 지정됩니다. android:dashGap가 설정된 경우에만 유효합니다.
예:
res/drawable/gradient_box.xml에 저장된 XML 파일:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:startColor="#FFFF0000"
        android:endColor="#80FF00FF"
        android:angle="45"/>
    <padding android:left="7dp"
        android:top="7dp"
        android:right="7dp"
        android:bottom="7dp" />
    <corners android:radius="8dp" />
</shape>

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

<TextView
    android:background="@drawable/gradient_box"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content" />

다음 애플리케이션 코드는 셰이프 드로어블을 가져와서 뷰에 적용합니다.

Resources res = getResources();
Drawable shape = res. getDrawable(R.drawable.gradient_box);

TextView tv = (TextView)findViewByID(R.id.textview);
tv.setBackground(shape);
참고 항목: