लीनियर लेआउट बनाना

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

LinearLayout एक व्यू ग्रुप है. यह सभी चाइल्ड को एक ही दिशा में अलाइन करता है. यह दिशा वर्टिकल या हॉरिज़ॉन्टल हो सकती है. android:orientation एट्रिब्यूट की मदद से, लेआउट की दिशा तय की जा सकती है.

इस इमेज में, लेआउट को तीन वर्टिकल स्लाइस में बांटा गया है
पहली इमेज. एक LinearLayout जिसमें हॉरिज़ॉन्टली ओरिएंटेड तीन चाइल्ड हैं.

LinearLayout के सभी चाइल्ड एक के बाद एक स्टैक किए जाते हैं. इसलिए, वर्टिकल लिस्ट में हर लाइन में सिर्फ़ एक चाइल्ड होता है. भले ही, उनकी चौड़ाई कितनी भी हो. हॉरिज़ॉन्टल लिस्ट की ऊंचाई सिर्फ़ एक लाइन होती है. इसकी ऊंचाई, सबसे ऊंचे चाइल्ड की ऊंचाई और पैडिंग के योग के बराबर होती है. A LinearLayout चाइल्ड के बीच मार्जिन और हर चाइल्ड के ग्रेविटी—राइट, सेंटर या लेफ्ट अलाइनमेंट—को ध्यान में रखता है.

लेआउट का वज़न

LinearLayout android:layout_weight एट्रिब्यूट की मदद से, अलग-अलग चाइल्ड को वज़न असाइन करने की सुविधा भी देता है. यह एट्रिब्यूट, स्क्रीन पर किसी व्यू के लिए "अहमियत" की वैल्यू असाइन करता है. इससे पता चलता है कि वह स्क्रीन पर कितनी जगह लेता है. वज़न की वैल्यू ज़्यादा होने पर, यह पैरंट व्यू में बाकी बची जगह को भरने के लिए फैल जाता है. चाइल्ड व्यू, वज़न की वैल्यू तय कर सकते हैं. व्यू ग्रुप में बाकी बची जगह, चाइल्ड को उनके तय किए गए वज़न के हिसाब से असाइन की जाती है. डिफ़ॉल्ट वज़न शून्य होता है.

बराबर डिस्ट्रिब्यूशन

ऐसा लीनियर लेआउट बनाने के लिए जिसमें हर चाइल्ड स्क्रीन पर एक जैसी जगह लेता है, वर्टिकल लेआउट के लिए हर व्यू का android:layout_height "0dp" पर सेट करें. वहीं, हॉरिज़ॉन्टल लेआउट के लिए हर व्यू का android:layout_width "0dp" पर सेट करें. इसके बाद, हर व्यू का android:layout_weight "1" पर सेट करें.

असमान डिस्ट्रिब्यूशन

ऐसे लीनियर लेआउट भी बनाए जा सकते हैं जिनमें चाइल्ड एलिमेंट, स्क्रीन पर अलग-अलग जगह लेते हैं. यहां कुछ उदाहरण दिए गए हैं:

  • मान लें कि आपके पास तीन टेक्स्ट फ़ील्ड हैं. इनमें से दो का वज़न 1 है और तीसरे का डिफ़ॉल्ट वज़न 0 है. वज़न की वैल्यू 0 वाला तीसरा टेक्स्ट फ़ील्ड, सिर्फ़ उतनी जगह लेता है जितनी उसके कॉन्टेंट के लिए ज़रूरी होती है. वज़न की वैल्यू 1 वाले बाकी दो टेक्स्ट फ़ील्ड, तीनों फ़ील्ड के कॉन्टेंट को मेज़र करने के बाद बची जगह को बराबर हिस्सों में बांटकर भर देते हैं.
  • अगर आपके पास तीन टेक्स्ट फ़ील्ड हैं, जिनमें से दो का वज़न 1 और तीसरे का वज़न 2 है, तो तीनों फ़ील्ड के कॉन्टेंट को मेज़र करने के बाद बची जगह को इस तरह बांटा जाता है: आधी जगह, वज़न की वैल्यू 2 वाले फ़ील्ड को मिलती है. वहीं, बाकी आधी जगह, वज़न की वैल्यू 1 वाले फ़ील्ड को बराबर हिस्सों में बांटकर मिलती है.

नीचे दी गई इमेज और कोड स्निपेट में दिखाया गया है कि "मैसेज भेजें" गतिविधि में लेआउट का वज़न कैसे काम कर सकता है. टू फ़ील्ड, सब्जेक्ट लाइन, और सेंड बटन, सिर्फ़ उतनी ऊंचाई लेते हैं जितनी उन्हें ज़रूरत होती है. मैसेज वाला एरिया, गतिविधि की बाकी ऊंचाई लेता है.

इस इमेज में, वर्टिकल ओरिएंटेशन वाले LinearLayout में तीन EditText और एक Button दिखाया गया है
दूसरी इमेज. वर्टिकली ओरिएंटेड LinearLayout में तीन टेक्स्ट फ़ील्ड और एक बटन.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:orientation="vertical" >
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/to" />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/subject" />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:gravity="top"
        android:hint="@string/message" />
    <Button
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_gravity="end"
        android:text="@string/send" />
</LinearLayout>

हर चाइल्ड व्यू के लिए उपलब्ध एट्रिब्यूट के बारे में जानने के लिए, LinearLayout देखें LinearLayout.LayoutParams.