设置容器行为

如需配置 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。有空间,因此间隙和 Child 2 会放置到该行中。

放置在 FlexBox 容器中的第二个内容,位于第一个内容之后。
图 2. 放置在 FlexBox 容器中的第二个商品(在第一个商品之后)。

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

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

在项目之间添加间距

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

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

rowGap

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

columnGap

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

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