设置容器行为

如需配置 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。它包含三个项目,分别具有 basis20dp40dp50dp

该行中有 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