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

لضبط سلوك الحاوية 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.