コンテナの動作を設定する

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 を使用して、1 行内の交差軸に沿ってアイテムを配置します。この 動作は、個々のアイテムで alignSelf修飾子を使用してオーバーライドできます。

次の図は、方向が Row の場合の動作を示しています。

縦の交差軸のイラスト。 交差軸の始端に配置されたアイテム。 交差軸の終端に配置されたアイテム。 交差軸の中央に揃えられたアイテム。 アイテムが交差軸を埋めるように拡張されます。 アイテムは交差軸に沿ってベースラインに揃えられます。

Start

End

Center

Stretch

Baseline

alignContent を使用して、行を交差軸に沿って配置し、行間の余白を分配します。このプロパティは、複数行の場合(折り返しが有効)にのみ適用されます。次の図は、方向が Row の場合の動作を示しています。

縦の交差軸のイラスト。 交差軸の始端に揃えられたアイテムの複数行。 複数の行のアイテムが交差軸の終端に配置されています。 交差軸の中央に揃えられた複数のアイテムの行。 複数の行のアイテムが交差軸を埋めるように拡張されています。 交差軸に沿って配置された複数の行のアイテム。アイテム間にはスペースがあります。 交差軸に沿って配置された複数のアイテムの行。アイテムの周囲にはスペースがあります。

Start

End

Center

Stretch

SpaceBetween

SpaceAround

アイテムをラップする

折り返しにより、FlexBox コンテナを複数行にすることができ、収まらないアイテムを交差軸に沿って新しい行または列に移動できます。折り返し動作は wrap を使用して構成します。

FlexWrap

方向 Row を使用した例

NoWrap(デフォルト): アイテムが折り返されないようにします。メインサイズが不十分な場合、アイテムはオーバーフローします。

折り返しが無効になっているため、コンテナからあふれる 1 行のアイテム。

Wrap: アイテム(とギャップ)に十分なスペースがない場合、交差軸の方向に新しい行が作成されます。たとえば、方向が Row の場合、新しい行が に追加されます。

折り返しが有効になっているため、アイテムが下の新しい行に折り返されています。

WrapReverse: Wrap と同じですが、新しい行は交差軸と反対の方向に追加されます。たとえば、方向が Row の場合、新しい行が に追加されます。

逆折り返しが有効になっているため、項目が上の新しい行に折り返されています。

次の例は、FlexBox 折り返しアルゴリズムの仕組みを示しています。FlexBox コンテナのメインサイズは 100dp で、wrapFlexWrap.Wrap に設定され、ギャップは 8dp です。これには、basis がそれぞれ 20dp40dp50dp の 3 つのアイテムが含まれています。

行には 100dp のスペースがあります。子 1 は 20dp です。 スペースがあるため、子 1 は行に配置されます。

FlexBox コンテナに配置された最初のアイテム。
図 1.FlexBox コンテナに配置された最初のアイテム。

行には 80dp のスペースがあります。ギャップは 8dp です。子 2 は 40dp です。必要なスペースは 48dp です。スペースがあるため、ギャップと子 2 が行に配置されます。

FlexBox コンテナに配置された最初のアイテム。
図 2.最初のアイテムの後に FlexBox コンテナに配置された 2 番目のアイテム。

行には 32dp のスペースがあります。ギャップは 8dp です。子 3 は 50dp です。必要なスペースは 58dp です。現在の行に十分なスペースがないため、子 3 は新しい行に配置されます。

3 番目の項目は、1 行目に収まらないため、新しい行に配置されています。
図 3.最初の行に収まらないため、新しい行に配置された 3 番目のアイテム。

アイテム間にギャップを追加する

rowGapcolumnGap を使用して、行と列の間にギャップを追加します。これは、子に間隔修飾子を追加しない場合に便利です。

row-gap は、アイテム間に垂直方向のスペースを追加します。 列間隔は、アイテム間に水平方向のスペースを追加します。 Gap は、アイテム間に水平方向と垂直方向の両方のスペースを追加します。

rowGap

は、アイテムと行の間に垂直方向のスペースを追加します。

columnGap

は、アイテムと行の間に水平方向のスペースを追加します。

gap は、columnGaprowGap の両方を追加する便利な関数です。