कंटेनर के व्यवहार को सेट करना

FlexBox कंटेनर के व्यवहार को कॉन्फ़िगर करने के लिए, FlexBoxConfig ब्लॉक बनाएं और config पैरामीटर का इस्तेमाल करके इसे उपलब्ध कराएं.

FlexBox(
    config = {
        direction(FlexDirection.Column)
        wrap(FlexWrap.Wrap)
        alignItems(FlexAlignItems.Center)
        alignContent(FlexAlignContent.SpaceAround)
        justifyContent(FlexJustifyContent.Center)
        gap(16.dp)
    }
) { // child items
}

FlexBoxConfig का इस्तेमाल करके, लेआउट की दिशा, रैपिंग का तरीका, अलाइनमेंट, और आइटम के बीच का गैप तय करें.

लेआउट की दिशा

direction फ़ंक्शन, मुख्य ऐक्सिस को सेट करता है. इससे यह तय होता है कि आइटम किस दिशा में रखे जाएंगे. इसमें ये वैल्यू इस्तेमाल की जा सकती हैं:

  • Row (डिफ़ॉल्ट): मुख्य ऐक्सिस को हॉरिज़ॉन्टल पर सेट करता है. बाएं से दाएं लिखे जाने वाले लोकेल में, यह बाएं से दाएं होगा. वहीं, दाएं से बाएं लिखे जाने वाले लोकेल में, यह दाएं से बाएं होगा.
  • RowReverse: Row की दिशा को उलट देता है.
  • Column: मुख्य ऐक्सिस को वर्टिकल, ऊपर से नीचे की ओर सेट करता है.
  • ColumnReverse: Column की दिशा को उलट देता है.

आइटम अलाइन करना और अतिरिक्त स्पेस को बांटना

यहां दिए गए सेक्शन में, आइटम को अलाइन करने और मुख्य और क्रॉस ऐक्सिस के साथ अतिरिक्त स्पेस को डिस्ट्रिब्यूट करने का तरीका बताया गया है.

मुख्य ऐक्सिस के साथ

मुख्य ऐक्सिस पर आइटम डिस्ट्रिब्यूट करने के लिए, justifyContent का इस्तेमाल करें. यहां दी गई टेबल में, Row दिशा होने पर होने वाले बदलावों के बारे में बताया गया है.

हॉरिज़ॉन्टल मेन ऐक्सिस का इलस्ट्रेशन.

Start

मुख्य ऐक्सिस की शुरुआत में अलाइन किए गए आइटम.

Center

आइटम, मुख्य ऐक्सिस के बीच में अलाइन किए गए हैं.

End

आइटम, मुख्य ऐक्सिस के आखिर में अलाइन किए जाते हैं.

SpaceBetween

आइटम को मुख्य ऐक्सिस के साथ डिस्ट्रिब्यूट किया गया है. साथ ही, उनके बीच स्पेस है.

SpaceAround

आइटम, मुख्य ऐक्सिस के साथ बांटे गए हैं और उनके आस-पास स्पेस है.

SpaceEvenly

आइटम को मुख्य ऐक्सिस के साथ डिस्ट्रिब्यूट किया जाता है. साथ ही, उनके आस-पास बराबर स्पेस होता है.

क्रॉस ऐक्सिस के साथ

एक ही लाइन में क्रॉस ऐक्सिस के साथ आइटम अलाइन करने के लिए, alignItems का इस्तेमाल करें. alignSelf मॉडिफ़ायर का इस्तेमाल करके, अलग-अलग आइटम के लिए इस व्यवहार को बदला जा सकता है.

यहां दी गई इमेज से पता चलता है कि दिशा Row होने पर, टेक्स्ट किस तरह दिखता है:

वर्टिकल क्रॉस ऐक्सिस का इलस्ट्रेशन. आइटम, क्रॉस ऐक्सिस की शुरुआत में अलाइन किए गए हैं. आइटम, क्रॉस ऐक्सिस के आखिर में अलाइन किए जाते हैं. आइटम, क्रॉस ऐक्सिस के बीच में अलाइन किए गए हैं. क्रॉस ऐक्सिस को भरने के लिए, आइटम को स्ट्रेच किया गया. आइटम, क्रॉस ऐक्सिस के साथ अपनी बेसलाइन के हिसाब से अलाइन किए गए हैं.

Start

End

Center

Stretch

Baseline

लाइनों को क्रॉस ऐक्सिस के हिसाब से अलाइन करने और लाइनों के बीच की अतिरिक्त जगह को बांटने के लिए, alignContent का इस्तेमाल करें. यह प्रॉपर्टी सिर्फ़ तब लागू होती है, जब एक से ज़्यादा लाइनें हों (रैपिंग की सुविधा चालू हो). यहां दी गई इमेज में, Row दिशा होने पर, टेक्स्ट का व्यवहार दिखाया गया है:

वर्टिकल क्रॉस ऐक्सिस का इलस्ट्रेशन. क्रॉस ऐक्सिस की शुरुआत में अलाइन किए गए आइटम की कई लाइनें. क्रॉस ऐक्सिस के आखिर में अलाइन किए गए आइटम की कई लाइनें. क्रॉस ऐक्सिस के बीच में अलाइन किए गए आइटम की कई लाइनें. आइटम की कई लाइनें, क्रॉस ऐक्सिस को भरने के लिए स्ट्रेच की गई हैं. आइटम की कई लाइनें, क्रॉस ऐक्सिस के साथ डिस्ट्रिब्यूट की जाती हैं. साथ ही, उनके बीच स्पेस होता है. क्रॉस ऐक्सिस पर आइटम की कई लाइनें डिस्ट्रिब्यूट की गई हैं. साथ ही, उनके आस-पास स्पेस है.

Start

End

Center

Stretch

SpaceBetween

SpaceAround

आइटम रैप करें

रैपिंग की मदद से, FlexBox कंटेनर को कई लाइनों में बदला जा सकता है. इससे, उन आइटम को नई लाइन या कॉलम में ले जाया जा सकता है जो क्रॉस-ऐक्सिस पर फ़िट नहीं होते. wrap का इस्तेमाल करके, रैपिंग के व्यवहार को कॉन्फ़िगर करें.

FlexWrap वैल्यू

Row दिशा का इस्तेमाल करने का उदाहरण

NoWrap (डिफ़ॉल्ट): आइटम को रैप होने से रोकता है. अगर मुख्य साइज़ ज़रूरत से कम है, तो आइटम ओवरफ़्लो हो जाते हैं.

एक लाइन में मौजूद आइटम, कंटेनर से बाहर निकल रहे हैं, क्योंकि रैपिंग की सुविधा बंद है.

Wrap: जब किसी आइटम (और किसी गैप) के लिए ज़रूरत के मुताबिक जगह नहीं होती है, तो क्रॉस ऐक्सिस की दिशा में एक नई लाइन बनाई जाती है. उदाहरण के लिए, अगर दिशा Row है, तो नई लाइन नीचे जोड़ी जाती है.

रैपिंग की सुविधा चालू होने की वजह से, आइटम नीचे नई लाइन में रैप हो रहे हैं.

WrapReverse: यह Wrap जैसा ही है. हालांकि, इसमें नई लाइन को क्रॉस ऐक्सिस की उल्टी दिशा में जोड़ा जाता है. उदाहरण के लिए, अगर दिशा Row है, तो ऊपर एक नई लाइन जोड़ी जाती है.

रिवर्स रैपिंग चालू होने की वजह से, आइटम ऊपर की ओर नई लाइन में रैप हो रहे हैं.

यहां दिए गए उदाहरण में, FlexBox रैपिंग एल्गोरिदम के काम करने का तरीका बताया गया है. FlexBox कंटेनर का मुख्य साइज़ 100dp है. इसमें wrap को FlexWrap.Wrap पर सेट किया गया है और 8dp का गैप है. इसमें तीन आइटम हैं. इनकी वैल्यू, क्रम से basis 20dp, 40dp, और 50dp है.

लाइन में 100dp जगह उपलब्ध है. पहले बच्चे की उम्र 20dp है. लाइन में जगह है, इसलिए पहले बच्चे को लाइन में शामिल कर लिया जाता है.

फ़्लेक्सबॉक्स कंटेनर में रखा गया पहला आइटम.
पहली इमेज. FlexBox कंटेनर में पहला आइटम रखा गया.

लाइन में 80dp जगह उपलब्ध है. अंतर 8dp है. दूसरे बच्चे की उम्र 40dp है. ज़रूरी स्टोरेज 48dp है. यहां जगह है, इसलिए गैप और चाइल्ड 2 को लाइन में रखा गया है.

फ़्लेक्सबॉक्स कंटेनर में पहले आइटम के बाद रखा गया दूसरा आइटम.
दूसरी इमेज. पहले आइटम के बाद, FlexBox कंटेनर में रखा गया दूसरा आइटम.

लाइन में 32dp जगह उपलब्ध है. अंतर 8dp है. तीसरे बच्चे की उम्र 50dp है. ज़रूरी स्टोरेज 58dp है. मौजूदा लाइन में ज़रूरत के मुताबिक जगह नहीं है. इसलिए, तीसरे चाइल्ड व्यू को नई लाइन में रखा गया है.

तीसरे आइटम को नई लाइन में रखा गया है, क्योंकि यह पहली लाइन में फ़िट नहीं हो रहा है.
तीसरी इमेज. तीसरा आइटम नई लाइन में रखा गया है, क्योंकि यह पहली लाइन में फ़िट नहीं हो रहा है.

आइटम के बीच गैप जोड़ना

rowGap और columnGap का इस्तेमाल करके, पंक्तियों और कॉलम के बीच गैप जोड़ें. यह चाइल्ड एलिमेंट में स्पेसिंग मॉडिफ़ायर जोड़ने से बचने के लिए मददगार है.

पंक्ति के बीच के गैप से, आइटम के बीच वर्टिकल स्पेस जुड़ता है. कॉलम गैप से, आइटम के बीच हॉरिज़ॉन्टल स्पेस जुड़ता है. गैप से, आइटम के बीच हॉरिज़ॉन्टल और वर्टिकल स्पेस जुड़ता है.

rowGap

आइटम और लाइनों के बीच वर्टिकल स्पेस जोड़ता है.

columnGap

आइटम और लाइनों के बीच हॉरिज़ॉन्टल स्पेस जोड़ता है.

gap एक सुविधा फ़ंक्शन है, जो columnGap और rowGap, दोनों को जोड़ता है.