设置容器行为

如需配置 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 个可用空间。Child 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。