Linear, Relative, Constraint, Table, Frame और भी बहुत कुछ। जब आप अपने ऐप्लिकेशन को डिज़ाइन करना चाहते हैं तो Android ऐप्लिकेशन्स के पास चुनने के लिए ढेर सारे लेआउट्स होते हैं। सवाल यह है कि सबसे अच्छा कौन सा है?
विभिन्न लेआउट्स की डिटेल में जाने से पहले, हम पहले व्यू ऑब्जेक्ट हायरार्की और Android की ड्रॉइंग प्रोसेस पर एक नज़र डालेंगे।
View और ViewGroup
ViewGroup को किसी भी व्यू की पैरेंट क्लास और साथ ही लेआउट्स की बेस क्लास समझें। यह एक ऐसे ऑब्जेक्ट को दर्शाता है जो अन्य व्यूज़ का कंटेनर होता है। उदाहरण के लिए, एक LinearLayout एक ViewGroup है क्योंकि यह व्यूज़ और अन्य लेआउट्स को समाहित कर सकता है।
दूसरी ओर, View UI एलिमेंट्स का बुनियादी बिल्डिंग ब्लॉक है। व्यूज़ एक ViewGroup का हिस्सा हो सकते हैं। उदाहरण के लिए, एक TextView एक View है।

मेजर → लेआउट → ड्रॉ → रिपीट
लेआउट्स Android में XML फ़ाइलों के रूप में सेव होते हैं। लेकिन वे स्क्रीन पर दिखने वाले ऑब्जेक्ट्स में कैसे बदलते हैं? प्रत्येक XML फ़ाइल इंस्टेंटिएट होती है (इसे इन्फ्लेट करना कहते हैं) और एक व्यू हायरार्की ट्री बनता है। इसका मतलब है कि अगर आपके पास लेआउट A के अंदर नेस्टेड लेआउट B है, तो उनका चाइल्ड-पैरेंट रिलेशनशिप होगा (लेआउट A, लेआउट B का पैरेंट है)। ट्री बनने के बाद, 3 फेज होते हैं: मेजर, लेआउट और ड्रॉ। इनमें से प्रत्येक फेज डेप्थ-फर्स्ट सर्च ऑर्डर में ट्री को ट्रैवर्स करता है।
मेजर (Measure)
पहले फेज में, प्रत्येक पैरेंट नोड अपने बच्चों के साइज़ से संबंधित कुछ कंस्ट्रेंट्स का पता लगाता है। यह ये सीमाएं नीचे अपने बच्चों को पास करता है, जहां प्रत्येक बच्चा अपने साइज़ का मूल्यांकन करता है (वह कितना बड़ा होना चाहता है) और दी गई सीमाओं और अपने बच्चों की सीमाओं को ध्यान में रखता है।
लेआउट (Layout)
यहां, प्रत्येक नोड स्क्रीन पर अपने प्रत्येक बच्चे के अंतिम साइज़ और पोज़िशन का फैसला करता है।
ड्रॉ (Draw)
रूट नोड से शुरू होकर, जो खुद को ड्रॉ करता है, फिर यह अपने बच्चों को खुद को ड्रॉ करने के लिए कहता है। इस तरह, पैरेंट पहले ड्रॉ होता है और उसके बच्चे उसके ऊपर ड्रॉ होते हैं।
उपरोक्त प्रोसेस को ध्यान में रखते हुए, आपको अपने ऐप्लिकेशन के लेआउट को यथासंभव शैलो (कम गहराई वाला) रखने की कोशिश करनी चाहिए ताकि व्यू हायरार्की को ट्रैवर्स करने में लगने वाला समय कम हो सके

लेआउट्स का विवरण
Linear (लीनियर)
यह अपने बच्चों को वर्टिकल या हॉरिजॉन्टल ओरिएंटेशन के साथ एक पंक्ति में व्यवस्थित करता है। मतलब, व्यूज़ या तो एक ही पंक्ति में होंगे या एक ही कॉलम में। आप android:orientation एट्रिब्यूट का उपयोग करके दिशा निर्दिष्ट कर सकते हैं।
Linear Layout की एक दिलचस्प विशेषता layout_weight एट्रिब्यूट है। इसका उपयोग यह बताने के लिए किया जाता है कि Linear Layout चाइल्ड व्यूज़ के बीच स्पेस को कैसे विभाजित करे। यह तब उपयोगी होता है जब आप चाहते हैं कि आपका लेआउट डिवाइसेज और ओरिएंटेशन्स में कंसिस्टेंट रहे।
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="https://schemas.android.com/apk/res/android" xmlns:app="https://schemas.android.com/apk/res-auto" xmlns:tools="https://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="World!" /> </LinearLayout>मान लीजिए आप चाहते हैं कि पहला TextView, जिसमें Hello शब्द है, हमेशा स्क्रीन की चौड़ाई का 3/4 हिस्सा ले। इसके लिए हम layout_weight एट्रिब्यूट का उपयोग कर सकते हैं।
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="https://schemas.android.com/apk/res/android" xmlns:app="https://schemas.android.com/apk/res-auto" xmlns:tools="https://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="4" // <-- हमने अपने लेआउट के लिए कुल वेट जोड़ा (4) tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="3" // <-- इसका वेट 4 में से 3 होगा (3/4) android:text="Hello" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="World!" android:layout_weight="1" // <-- इसका वेट 4 में से 1 होगा (1/4) /> </LinearLayout>Relative (रिलेटिव)
जैसा कि नाम से पता चलता है, यह लेआउट अपने इनर चाइल्ड व्यूज़ को रिलेटिव पोज़िशन में सेट करता है। यह आपके लेआउट हायरार्की को बिना नेस्टेड व्यू ग्रुप्स के फ्लैट रख सकता है। हालांकि, प्रत्येक Relative Layout को दो मेजर पास की प्रक्रिया से गुजरना पड़ता है, जो परफॉरमेंस पर असर डाल सकता है।
RelativeLayout की एक उपयोगी विशेषता centerInParent एट्रिब्यूट का उपयोग करके चाइल्ड व्यू को सेंटर करने की क्षमता है।

Constraint (कंस्ट्रेंट)
एक कंस्ट्रेंट उस एलिमेंट से एक कनेक्शन या अलाइनमेंट है जिससे कंस्ट्रेंट बंधा होता है। आप मौजूद अन्य व्यूज़ के सापेक्ष प्रत्येक चाइल्ड व्यू के लिए विभिन्न कंस्ट्रेंट्स परिभाषित करते हैं। यह आपको फ्लैट व्यू हायरार्की (कोई नेस्टेड ViewGroups नहीं) के साथ कॉम्प्लेक्स लेआउट बनाने की क्षमता देता है। RelativeLayout के समान, इस लेआउट को भी दो मेजर पास की आवश्यकता होती है।

Frame (फ्रेम)
इस लेआउट का उपयोग केवल एक सिंगल चाइल्ड व्यू को रखने के लिए किया जाता है, इस प्रकार लेआउट में किसी अन्य व्यू को ब्लॉक कर दिया जाता है। लेआउट स्वयं अपने सबसे बड़े चाइल्ड व्यू (विजिबल हो या नहीं) जितना बड़ा होगा, साथ में कुछ पैडिंग।
FrameLayout के अंदर कई चाइल्ड व्यूज़ रखने से बचें क्योंकि चाइल्ड व्यूज़ को एक-दूसरे से ओवरलैप होने से बचाना मुश्किल होगा। आप प्रत्येक चाइल्ड को layout_gravity एट्रिब्यूट असाइन करके इन चाइल्ड व्यूज़ की पोज़िशन को कंट्रोल कर सकते हैं।

List View / Grid View
जब आपको स्क्रीन पर कई आइटम्स प्रस्तुत करने की आवश्यकता हो (जैसे रेस्टोरेंट मेनू में)। List View एक सिंगल कॉलम लिस्ट है जिसे यूज़र स्क्रॉल कर सकता है। आप Grid View को एक से अधिक कॉलम वाले List View के रूप में सोच सकते हैं।
इन लेआउट्स के बारे में जानने वाली महत्वपूर्ण बात यह है कि व्यूज़ डायनामिक हैं और रनटाइम पर बनाए जाते हैं। रनटाइम पर आइटम्स को पॉप्युलेट करने के लिए, आपको AdapterView का उपयोग करना होगा।

TableLayout (टेबल लेआउट)
Grid View के समान, यह लेआउट अपने बच्चों को पंक्तियों और कॉलम में व्यवस्थित करता है। प्रत्येक लेआउट में कई TableRow ऑब्जेक्ट्स होंगे, जिनमें से प्रत्येक एक पंक्ति को परिभाषित करता है।

अलग-अलग लेआउट्स आज़माने से न डरें जब तक कि आपको वह न मिल जाए जो आपके लिए सबसे अच्छा काम करता है। बेझिझक कमेंट्स में बताएं कि कौन सा लेआउट आपके लिए सबसे उपयोगी है और क्यों।