Android 11 デベロッパー プレビュー 2 が公開されました。ぜひお試しのうえ、フィードバックをお寄せください

複雑な 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" />
    

アニメーション化ベクター型ドローアブルを 1 つ作成するだけですが、数多くのファイルを用意する必要があります。この方法は、ベクター型ドローアブルやアニメーションを別の場所で再利用するのであれば、アニメーション化ベクター型ドローアブルを実装する方法として最適です。一方、各リソースを 1 つのアニメーション化ベクター型ドローアブルに使用するだけであれば、もっとコンパクトな方法で実装することができます。

AAPT のインライン リソース形式を使用することで、3 つのリソースをすべて同じ 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>
    

<aapt:attr > XML タグは、このタグの子をリソースとして扱い、それぞれ独自のリソース ファイルに抽出するよう、AAPT に伝えます。属性名の値は、親タグ内でインライン リソースを使用する場所を指定します。

AAPT が、すべてのインライン リソースを対象としてリソース ファイルとリソース名を生成します。このインライン形式を使用して作成されたアプリは、すべての Android バージョンと互換性を持ちます。