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

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 で、wrap は FlexWrap.Wrap に設定され、ギャップは 8dp です。これには、basis 20dp、40dp、50dp の 3 つのアイテムが含まれます。

この行には 100dp の空きスペースがあります。1 人目のお子様は 20dp です。 スペースがあるため、子 1 が行に配置されます。

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

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

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

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

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

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

rowGap と columnGap を使用して、行と列の間にギャップを追加します。これは、子に間隔修飾子を追加しないようにするのに役立ちます。

行ギャップは、アイテム間に垂直方向のスペースを追加します。 列ギャップは、アイテム間に水平方向のスペースを追加します。 gap は、アイテム間に水平方向と垂直方向の両方のスペースを追加します。

rowGap

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

columnGap

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

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