如需配置 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 时的行为。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
沿交叉轴
使用 alignItems 可沿交叉轴在单行内对齐各项内容。各个项可以使用 alignSelf 修饰符替换此行为。
下图展示了方向为 Row 时的行为:
|
|
|
|
|
|
|
|
|
|
|
使用 alignContent 可将行与交叉轴对齐,并在行之间分配额外空间。此属性仅在有多行(启用换行)时适用。下图展示了方向为 Row 时的行为:
|
|
|
|
|
|
|
|
|
|
|
|
|
封装内容
换行可让 FlexBox 容器变为多行,将不适合当前行或列的内容沿交叉轴移至新行或新列。使用 wrap 配置换行行为。
|
使用方向 |
|
|
|
|
|
|
以下示例展示了 FlexBox 封装算法的工作原理。FlexBox 容器的主轴尺寸为 100dp,wrap 设置为 FlexWrap.Wrap,间距为 8dp。它包含三个项,basis 分别为 20dp、40dp 和 50dp。
该行有 100dp 个可用空间。Child 1 为 20dp。
有空间,因此子项 1 被放入该行。
FlexBox 容器中的第一项。该行有 80dp 个可用空间。差距为 8dp。孩子 2 为40dp。所需空间为 48dp。由于有空间,因此间隙和子项 2 会放入该行。
FlexBox 容器中放置在第一项后面的第二项。该行有 32dp 个可用空间。差距为 8dp。子级 3 为 50dp。所需空间为 58dp。当前行中没有足够的空间,因此子级 3 放置在新行中。
在内容之间添加间距
使用 rowGap 和 columnGap 在行和列之间添加间隙。这有助于避免向子项添加间距修饰符。
|
|
|
在项和行之间添加垂直间距。 |
在项和行之间添加水平间距。 |
|