تضمين موارد XML المعقدة

بعض أنواع الموارد هي تركيبة من موارد متعددة معقدة تمثلها ملفات 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.