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

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(デフォルト): アイテムが折り返されるのを防ぎます。メインサイズが不足している場合、アイテムはオーバーフローします。

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

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

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

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

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

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

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

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

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

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

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

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

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

rowGapcolumnGap を使用して、行と列の間にギャップを追加します。これは、子にスペーシング修飾子を追加しないようにする場合に便利です。

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

rowGap

項目と行の間に垂直方向のスペースを追加します。

columnGap

項目と行の間に水平方向のスペースを追加します。

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