設定容器行為

如要設定 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 20dp40dp50dp

該行有 100dp 可用空間。孩子 1 為 20dp。 有空間,因此 Child 1 會放在該行。

放置在 FlexBox 容器中的第一個項目。
圖 1. 放置在 FlexBox 容器中的第一個項目。

該行有 80dp 可用空間。差距為 8dp。孩子 2 是 40dp。所需空間為 48dp。有空間,因此間隙和 Child 2 會放置在該行中。

放置在 FlexBox 容器中的第一個項目。
圖 2. 第一個項目之後,放置在 FlexBox 容器中的第二個項目。

該行有 32dp 可用空間。差距為 8dp。孩子 3 是 50dp。所需空間為 58dp。目前行空間不足,因此「Child 3」會換行。

第三個項目不適合放在第一行,因此會換行顯示。
圖 3. 第三個項目放在新的一行,因為第一行放不下。

在項目之間加入間隙

使用 rowGapcolumnGap 在列和欄之間新增間距。這有助於避免在子項中加入間距修飾符。

列間距會在項目之間加入垂直空間。 資料欄間距會在項目之間新增水平空間。 間距會在項目之間新增水平和垂直空間。

rowGap

在項目和行之間新增垂直空間。

columnGap

在項目和行之間新增水平空間。

gap 是一種便利函式,可同時新增 columnGaprowGap