某些资源类型是由多个复杂资源(由 XML 文件表示)组成的。一个例子是动画矢量可绘制对象,它是一个可绘制对象资源,封装了一个矢量可绘制对象和一个动画。这需要使用至少三个 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" />
如果矢量可绘制对象和动画在其他地方重复使用,这是实现动画矢量可绘制对象的最佳方法。但是,如果这些文件仅用于此动画矢量可绘制对象,则有一种更紧凑的方法可以实现它们。
使用 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 兼容。