تنظیم رفتار کانتینر

برای پیکربندی رفتار کانتینر 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 برای تراز کردن خطوط نسبت به محور متقاطع و توزیع فضای اضافی بین خطوط استفاده کنید. این ویژگی فقط زمانی اعمال می‌شود که چندین خط وجود داشته باشد (wrapping فعال باشد). تصاویر زیر رفتار را زمانی که جهت Row است نشان می‌دهند:

تصویرسازی از یک محور متقاطع عمودی.چندین خط از آیتم‌ها که با ابتدای محور متقاطع هم‌تراز شده‌اند.چندین خط از آیتم‌ها که با انتهای محور متقاطع هم‌تراز شده‌اند.چندین خط از آیتم‌ها که با مرکز محور متقاطع تراز شده‌اند.چندین خط از آیتم‌ها کشیده شده‌اند تا محور متقاطع را پر کنند.چندین خط از آیتم‌ها که در امتداد محور عرضی توزیع شده‌اند و بین آنها فاصله وجود دارد.چندین ردیف از آیتم‌ها که در امتداد محور عرضی با فضای خالی در اطرافشان توزیع شده‌اند.

Start

End

Center

Stretch

SpaceBetween

SpaceAround

وسایل را بپیچید

بسته‌بندی به یک کانتینر FlexBox اجازه می‌دهد تا به چند خط تبدیل شود و مواردی را که در یک ردیف یا ستون جدید در امتداد محور عرضی قرار نمی‌گیرند، جابجا کند. رفتار بسته‌بندی را با استفاده از wrap پیکربندی کنید.

مقدار FlexWrap

مثال با استفاده از Row جهت

NoWrap (پیش‌فرض): از بسته‌بندی آیتم‌ها جلوگیری می‌کند. اگر اندازه اصلی کافی نباشد، آیتم‌ها سرریز می‌شوند.

موارد موجود در یک خط به دلیل غیرفعال بودن قابلیت پوشش‌دهی، از کانتینر سرریز می‌شوند.

Wrap : وقتی فضای کافی برای یک آیتم وجود ندارد (به‌علاوه هرگونه فاصله )، یک خط جدید در جهت محور عرضی ایجاد می‌شود. برای مثال، اگر جهت Row باشد، یک خط جدید در زیر آن اضافه می‌شود.

موارد به دلیل فعال بودن قابلیت wrapping، در یک خط جدید زیر قرار می‌گیرند.

WrapReverse : همانند Wrap است، با این تفاوت که خط جدید در جهت مخالف محور عرضی اضافه می‌شود. برای مثال، اگر جهت Row باشد، یک خط جدید در بالا اضافه می‌شود.

موارد به دلیل فعال بودن قابلیت «بسته‌بندی معکوس»، در یک خط جدید در بالا قرار می‌گیرند.

مثال زیر نحوه عملکرد الگوریتم پوشش FlexBox را نشان می‌دهد. کانتینر FlexBox دارای اندازه اصلی 100dp است، که wrap روی FlexWrap.Wrap تنظیم شده و فاصله بین آنها 8dp است. این کانتینر شامل سه آیتم با basis 20dp ، 40dp و 50dp است.

100dp فضای خالی در خط وجود دارد. فرزند ۱، 20dp است. فضا وجود دارد، بنابراین فرزند ۱ در خط قرار می‌گیرد.

اولین آیتم در کانتینر FlexBox قرار داده می‌شود.
شکل ۱. اولین آیتم قرار داده شده در کانتینر FlexBox .

فضای خالی 80dp در خط وجود دارد. فاصله 8dp است. فرزند ۲، 40dp است. فضای مورد نیاز 48dp است. فضا وجود دارد، بنابراین فاصله و فرزند ۲ در خط قرار می‌گیرند.

اولین آیتم در کانتینر FlexBox قرار داده می‌شود.
شکل ۲. دومین آیتم که پس از اولین آیتم در کانتینر FlexBox قرار داده شده است.

فضای خالی در خط 32dp است. فاصله 8dp است. فرزند ۳، 50dp است. فضای مورد نیاز 58dp است. فضای کافی در خط فعلی وجود ندارد، بنابراین فرزند ۳ در یک خط جدید قرار می‌گیرد.

مورد سوم در یک خط جدید قرار داده شد زیرا در خط اول جا نمی‌شد.
شکل ۳. مورد سوم به دلیل اینکه در خط اول جا نمی‌شود، در خط جدید قرار داده شده است.

بین موارد فاصله اضافه کنید

با استفاده از rowGap و columnGap بین ردیف‌ها و ستون‌ها فاصله اضافه کنید. این کار برای جلوگیری از اضافه کردن اصلاح‌کننده‌های فاصله به عناصر فرزند مفید است.

فاصله ردیف‌ها، فضای عمودی بین آیتم‌ها را اضافه می‌کند.فاصله ستون‌ها، فضای افقی بین آیتم‌ها اضافه می‌کند.Gap فضای افقی و عمودی بین آیتم‌ها اضافه می‌کند.

rowGap

فضای عمودی بین آیتم‌ها و خطوط اضافه می‌کند.

columnGap

فضای افقی بین آیتم‌ها و خطوط اضافه می‌کند.

gap یک تابع کمکی است که هم columnGap و هم rowGap را جمع می‌کند.