인라인 복합 XML 리소스

특정 리소스 유형은 XML 파일로 표현되는 여러 복합 리소스로 구성됩니다. 한 예로 애니메이션 벡터 드로어블을 들 수 있으며 이는 벡터 드로어블과 애니메이션을 캡슐화하는 드로어블 리소스입니다. 이 리소스는 다음 예와 같이 XML 파일을 3개 이상 사용해야 합니다.

res/drawable/avd.xml
<?xml version="1.0" encoding="utf-8"?>
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/vectordrawable" >
    <target
        android:name="rotationGroup"
        android:animation="@anim/rotation" />
</animated-vector>
res/drawable/vectordrawable.xml
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:height="64dp"
    android:width="64dp"
    android:viewportHeight="600"
    android:viewportWidth="600" >
    <group
        android:name="rotationGroup"
        android:pivotX="300.0"
        android:pivotY="300.0"
        android:rotation="45.0" >
        <path
            android:fillColor="#000000"
            android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" />
    </group>
</vector>
res/anim/rotation.xml
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/android"
    android:duration="6000"
    android:propertyName="rotation"
    android:valueFrom="0"
    android:valueTo="360" />

벡터 드로어블과 애니메이션이 다른 곳에서 재사용된다면 이는 애니메이션 벡터 드로어블을 구현하는 가장 좋은 방법입니다. 그러나 이러한 파일이 이 애니메이션 벡터 드로어블에만 사용된다면 이를 구현하는 더 간단한 방법이 있습니다.

AAPT의 인라인 리소스 형식을 사용하면 다음 예와 같이 동일한 XML 파일에서 세 가지 리소스를 모두 정의할 수 있습니다. 애니메이션 벡터 드로어블의 경우 파일을 res/drawable/ 아래에 배치합니다.

res/drawable/avd.xml
<?xml version="1.0" encoding="utf-8"?>
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:aapt="http://schemas.android.com/aapt" >

    <aapt:attr name="android:drawable" >
        <vector
            android:height="64dp"
            android:width="64dp"
            android:viewportHeight="600"
            android:viewportWidth="600" >
            <group
                android:name="rotationGroup"
                android:pivotX="300.0"
                android:pivotY="300.0"
                android:rotation="45.0" >
                <path
                    android:fillColor="#000000"
                    android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" />
            </group>
        </vector>
    </aapt:attr>

    <target android:name="rotationGroup">
        <aapt:attr name="android:animation" >
            <objectAnimator
                android:duration="6000"
                android:propertyName="rotation"
                android:valueFrom="0"
                android:valueTo="360" />
        </aapt:attr>
    </target>
</animated-vector>

XML 태그 <aapt:attr >은 태그의 하위 요소를 리소스로 취급하고 자체 리소스 파일로 추출하도록 AAPT에 지시합니다. 속성 이름의 값은 상위 태그 내에서 인라인 리소스를 사용할 위치를 지정합니다.

AAPT는 모든 인라인 리소스의 리소스 파일과 이름을 생성합니다. 이 인라인 형식을 사용하여 빌드된 애플리케이션은 모든 버전의 Android와 호환됩니다.