某些资源类型是由多个复杂资源(由 XML 文件表示)组成的。一个例子是动画矢量 Drawable,它是一个包含矢量 Drawable 和动画的 Drawable 资源。这需要使用至少三个 XML 文件,如以下示例所示。
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" />
如果矢量 Drawable 和动画在其他地方被重用,这是实现动画矢量 Drawable 的最佳方式。但如果这些文件仅用于此动画矢量 Drawable,那么有更紧凑的方式来实现它们。
使用 AAPT 的内联资源格式,您可以在同一个 XML 文件中定义所有这三个资源,如以下示例所示。对于动画矢量 Drawable,请将文件放在 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 版本兼容。