设置容器行为

如需配置 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 容器的主尺寸为 100dpwrap 设置为 FlexWrap.Wrap,间距为 8dp。它包含三个项,其 basis 分别为 20dp40dp50dp

该行中有 100dp 的可用空间。子项 1 为 20dp。 有空间,因此子项 1 会放置在该行中。

放置在 Flexbox 容器中的第一个项目。
图 1.放置在 FlexBox 容器中的第一个项。

该行中有 80dp 的可用空间。间距为 8dp。子项 2 为 40dp。所需空间为 48dp。有空间,因此间距和子项 2 会放置在该行中。

放置在 Flexbox 容器中的第一个项目。
图 2.放置在 FlexBox 容器中的第二个项(在第一个项之后)。

该行中有 32dp 的可用空间。间距为 8dp。子项 3 为 50dp。所需空间为 58dp。当前行中没有足够的空间,因此子项 3 会放置在新行中。

第三个商品放置在新的一行,因为它不适合放在第一行。
图 3.放置在新行中的第三个项,因为它不适合放在第一行中。

在项之间添加间距

使用 rowGapcolumnGap 在行和列之间添加间距。这有助于避免向子项添加间距修饰符。

行间距会在项之间添加垂直空间。 列间距会在各个项目之间添加水平空间。 Gap 会在项目之间添加水平和垂直空间。

rowGap

在项和行之间添加垂直空间。

columnGap

在项和行之间添加水平空间。

gap 是一个便捷函数,用于同时添加 columnGaprowGap