إعادة استخدام التنسيقات باستخدام <include>

رغم أن Android يقدم مجموعة متنوعة من الأدوات لتوفير عناصر تفاعلية صغيرة وقابلة لإعادة الاستخدام قد تحتاج أيضًا إلى إعادة استخدام مكونات أكبر تتطلب تخطيطًا خاصًا. لإعادة استخدام المحتوى بفعالية التنسيقات كاملة، استخدم العلامتين <include> و<merge> لتضمينها تخطيط داخل آخر.

يتيح لك هذا إنشاء تنسيقات معقدة - مثل لوحة زر نعم أو لا أو تقدم مخصص الشريط مع نص الوصف. وهو يعني أنه يمكنك استخراج أي عناصر في تطبيقك شائعة عبر تخطيطات متعددة، وإدارتها بشكل منفصل، وتضمينها في كل تخطيط. بينما يمكنك إنشاء مكونات فردية لواجهة المستخدم عن طريق كتابة View، يمكنك إجراء ذلك بسهولة أكبر من خلال إعادة استخدام ملف تخطيط.

إنشاء تخطيط قابل لإعادة الاستخدام

ابدأ بإنشاء ملف XML جديد وحدِّد التنسيق الذي تريد استخدامه لإعادة استخدامه. بالنسبة على سبيل المثال، إليك تخطيط يحدد شريط العناوين لتضمينه في كل نشاط (titlebar.xml):

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/titlebar_bg"
    tools:showIn="@layout/activity_main" >

    <ImageView android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:src="@drawable/gafricalogo" />
</FrameLayout>

يجب أن يكون الجذر View هو نفسه الشكل الذي تريد ظهوره في كل منهما بالضبط. التخطيط حيث تخطط لإضافة هذا التخطيط.

استخدام العنصر <include> جهاز تتبّع

داخل التخطيط الذي تريد إضافة المكون القابل لإعادة الاستخدام، أضف العلامة <include> على سبيل المثال، إليك تخطيط يتضمن شريط العناوين من المثال السابق:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/app_bg"
    android:gravity="center_horizontal">

    <include layout="@layout/titlebar"/>

    <TextView android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:text="@string/hello"
              android:padding="10dp" />
    ...
</LinearLayout>

يمكنك أيضًا إلغاء جميع مَعلمات التنسيق، أي android:layout_*. السمات — الخاصة بطريقة العرض الجذري للتخطيط المضمن من خلال تحديدها في العلامة <include> يظهر ذلك في المثال التالي:

<include android:id="@+id/news_title"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         layout="@layout/title"/>

وإذا كنت تريد إلغاء سمات التنسيق باستخدام العلامة <include>، أيضًا إلغاء android:layout_height وandroid:layout_width لإجراء دخول سمات التخطيط الأخرى حيز التنفيذ.

استخدام <merge> جهاز تتبّع

تساعد العلامة <merge> في إزالة مجموعات طرق العرض المكرّرة في التدرج الهرمي لطريقة العرض. عند تضمين تخطيط داخل آخر. إنّ إحدى حالات استخدام <merge> هي عندما تنفيذ طريقة عرض مخصّصة من خلال تمديد ViewGroup.

على سبيل المثال، إذا كان التخطيط الرئيسي عموديًا LinearLayout حيث اثنان ويمكن إعادة استخدام طرق العرض المتتالية في تخطيطات متعددة، ثم التخطيط القابل لإعادة الاستخدام حيث تضع طريقتين عرض تتطلب طريقة عرض الجذر الخاصة بها. ومع ذلك، فإن استخدام LinearLayout آخر كجذر للحصول على نتائج التصميم القابل لإعادة الاستخدام في LinearLayout عموديًا داخل رأسي LinearLayout لا تخدم LinearLayout المدمجة أي غرض حقيقي وتعمل على إبطاء. انخفاض أداء واجهة المستخدم.

بدلاً من ذلك، يمكنك توسيع LinearLayout لإنشاء طريقة عرض مخصّصة واستخدام تنسيق XML. لوصف وجهات نظره الفرعية. إنّ العلامة العلوية في ملف XML هي علامة <merge>، بدلاً من LinearLayout، كما هو موضّح في المثال التالي:

<merge xmlns:android="http://schemas.android.com/apk/res/android">

    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/add"/>

    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/delete"/>

</merge>

عند تضمين هذا التنسيق في تنسيق آخر، باستخدام <include> علامة: يتجاهل النظام العنصر <merge> ويضع الزرين مباشرةً في التنسيق، بدلاً من العلامة <include>

لمزيد من المعلومات عن <include>، يُرجى الاطّلاع على مورد التنسيق: