ضبط سلوك الحاوية

لضبط سلوك الحاوية 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 مساحة في الصف. الطفل 1 هو 20dp. تتوفّر مساحة، لذا يتم وضع "الطفل 1" في قائمة الانتظار.

العنصر الأول الذي تم وضعه في حاوية FlexBox
الشكل 1. العنصر الأول الذي تم وضعه في الحاوية FlexBox

تتوفّر 80dp مساحة في الصف. الفجوة هي 8dp. الطفل 2 هو 40dp. المساحة المطلوبة هي 48dp. تتوفّر مساحة، لذا يتم وضع الفجوة و"الطفل 2" في السطر.

العنصر الأول الذي تم وضعه في حاوية FlexBox
الشكل 2. العنصر الثاني الذي تم وضعه في الحاوية FlexBox بعد العنصر الأول

تتوفّر 32dp مساحة في الصف. الفجوة هي 8dp. الطفل 3 هو 50dp. المساحة المطلوبة هي 58dp. لا تتوفّر مساحة كافية في السطر الحالي، لذا تم وضع Child 3 في سطر جديد.

تم وضع العنصر الثالث في سطر جديد لأنّه لا يتّسع في السطر الأول.
الشكل 3. تم وضع العنصر الثالث في سطر جديد لأنّه لا يتناسب مع السطر الأول.

إضافة فجوات بين العناصر

أضِف فجوات بين الصفوف والأعمدة باستخدام rowGap وcolumnGap. ويكون ذلك مفيدًا لتجنُّب إضافة معدِّلات المسافات إلى العناصر الفرعية.

تضيف فجوة الصف مساحة عمودية بين العناصر. تضيف فجوة الأعمدة مساحة أفقية بين العناصر. تضيف السمة Gap مساحة أفقية وعمودية بين العناصر.

rowGap

تضيف مساحة عمودية بين العناصر والأسطر.

columnGap

تضيف مساحة أفقية بين العناصر والخطوط.

gap هي دالة تيسير تضيف كلاً من columnGap وrowGap.