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 को बढ़ाया जा सकता है. साथ ही, इसके चाइल्ड व्यू के बारे में बताने के लिए लेआउट 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> के बारे में ज़्यादा जानने के लिए, लेआउट संसाधन देखें.