page.title=Inline Complex XML Resources parent.title=Application Resources parent.link=index.html @jd:body <p>Certain resource types are a composition of multiple complex resources represented by XML files. One example is an animated vector drawable, which is a drawable resource encapsulating a vector drawable and an animation. This requires the use of at least three XML files.</p> <dl> <dt><code>res/drawable/avd.xml</code></dt> <dd> <pre class="stx"> <?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> </pre> </dd> <dt><code>res/drawable/vectordrawable.xml</code></dt> <dd> <pre class="stx"> <?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> </pre> </dd> <dt><code>res/anim/rotation.xml</code></dt> <dd> <pre class="stx"> <?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" /> </pre> </dd> </dl> <p>There are a lot of files here just to make a single animated vector drawable! If the vector drawable and animations are re-used elsewhere, this is the best way to implement an animated vector drawable. If they’re only ever used for this animated vector drawable, then there is a more compact way to implement them.</p> <p>Using AAPT’s inline resource format, you can define all three resources in the same XML file. Since we’re making an animated vector drawable, we put the file under <code>res/drawable/</code>.</p> <dl> <dt><code>res/drawable/avd.xml</code></dt> <dd> <pre class="stx"> <?xml version="1.0" encoding="utf-8"?> <animated-vector xmlns:android="http://schemas.android.com/apk/res/android" <strong>xmlns:aapt="http://schemas.android.com/aapt"</strong> > <strong><aapt:attr name="android:drawable" ></strong> <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> <strong><aapt:attr /></strong> <target android:name="rotationGroup" /> <strong><aapt:attr name="android:animation" ></strong> <objectAnimator android:duration="6000" android:propertyName="rotation" android:valueFrom="0" android:valueTo="360" /> <strong><aapt:attr></strong> </animated-vector> </pre> </dd> </dl> <p>The XML tag <code><aapt:attr ></code> tells AAPT that the tag’s child shall be treated as a resource and extracted into its own resource file. The value in the attribute name specifies where to use the inline resource within the parent tag.</p> <p>AAPT will generate resource files and names for all of the inline resources. Applications built using this inline format are compatible with all versions of Android.</p>