<include> के साथ लेआउट का फिर से इस्तेमाल करें

Compose का इस्तेमाल करके मैसेज लिखना
Android के लिए, Jetpack Compose को यूज़र इंटरफ़ेस (यूआई) टूलकिट के तौर पर सुझाया जाता है. Compose में लेआउट इस्तेमाल करने का तरीका जानें.

Android, छोटे, फिर से इस्तेमाल किए जा सकने वाले, इंटरैक्टिव एलिमेंट देने के लिए कई तरह के विजेट उपलब्ध कराता है. हालांकि, आपको बड़े कॉम्पोनेंट का फिर से इस्तेमाल भी करना पड़ सकता है. इन कॉम्पोनेंट के लिए, किसी खास लेआउट की ज़रूरत होती है. पूरे लेआउट का फिर से बेहतर तरीके से इस्तेमाल करने के लिए, एक लेआउट को दूसरे में एम्बेड करने के लिए <include> और <merge> टैग का इस्तेमाल करें.

इसकी मदद से, जटिल लेआउट बनाए जा सकते हैं. जैसे, 'हां' या 'नहीं' बटन पैनल या ब्यौरे वाले टेक्स्ट के साथ कस्टम प्रोग्रेस बार. इसका मतलब है कि आप अपने ऐप्लिकेशन के ऐसे किसी भी एलिमेंट को एक्सट्रैक्ट कर सकते हैं जो एक से ज़्यादा लेआउट में एक जैसा है. साथ ही, उन्हें अलग-अलग मैनेज करके हर लेआउट में शामिल कर सकते हैं. हालांकि, एक कस्टम View लिखकर अलग-अलग यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट बनाए जा सकते हैं, लेकिन लेआउट फ़ाइल का फिर से इस्तेमाल करके इसे ज़्यादा आसानी से बनाया जा सकता है.

फिर से इस्तेमाल किया जा सकने वाला लेआउट बनाना

एक नई एक्सएमएल फ़ाइल बनाकर और वह लेआउट तय करके शुरू करें जिसे आपको फिर से इस्तेमाल करना है. उदाहरण के लिए, यहां एक लेआउट दिया गया है, जिसमें हर गतिविधि (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 को बढ़ाया जा सकता है और चाइल्ड व्यू की जानकारी देने के लिए, लेआउट एक्सएमएल का इस्तेमाल किया जा सकता है. एक्सएमएल में सबसे ऊपर वाला टैग, LinearLayout के बजाय <merge> होना चाहिए, जैसा कि यहां दिए गए उदाहरण में दिखाया गया है:

<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> के बारे में ज़्यादा जानकारी के लिए, लेआउट संसाधन देखें.