設定容器行為

如要設定 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。目前這一行沒有足夠的空間,因此子項 3 會放在新的一行。

第三個項目放在新的一行,因為第一行放不下。
圖 3. 第三個項目放在新的一行,因為第一行放不下。

在項目之間加入間隔

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

「列間距」會在項目之間加入垂直空間。 欄間距會增加項目之間的水平空間。 Gap 會在項目之間加入水平和垂直空間。

rowGap

在項目和行之間加入垂直空間。

columnGap

在項目和行之間加入水平空間。

gap 是便利函式,可同時新增 columnGap 和 rowGap。