Grid 構成で全体構造を定義しますが、
gridItem 修飾子を使用して、その構造内のアイテムの位置、スパン、
配置を制御します。
アイテムの位置を設定する
row パラメータと column パラメータを使用して、アイテムを特定のトラックまたはセルに配置します。
row パラメータと column パラメータは、アイテムが配置される行と列のトラック インデックスを指定します。トラック インデックスは 1 ベースで、1 から始まります。
row または column のいずれか(両方ではない)のみを指定すると、アイテムはそのトラックの次の空きスペースに配置されます。両方を指定すると、アイテムはそのセルに配置されます。
正の整数を使用して、先頭からのトラック インデックスを指定します。
たとえば、アイテムを最初の行と列に配置するには、gridItem(row = 1, column = 1) を使用します。
負の整数を使用して、末尾からの相対的なトラックを指定します。
たとえば、アイテムを最後から 2 番目の行と列に配置するには、gridItem(row = -2, column = -2) を使用します。
次の例では、カード #2 は 2 行目と 2 列目に配置されています。 カード #3 は最後の行(-1 でインデックス付け)に割り当てられ、そのトラックの最初の空き列を自動的に占有します(図 1)。
Grid( config = { repeat(2) { column(160.dp) } repeat(3) { row(90.dp) } gap(8.dp) } ) { Card1() Card2(modifier = Modifier.gridItem(row = 2, column = 2)) Card3(modifier = Modifier.gridItem(row = -1, column = -2)) }
行と列をスパンする
rowSpan パラメータと columnSpan パラメータを使用して、アイテムを複数のセルにまたがって配置します。UI 要素を グリッド領域に配置できます。
グリッド領域は、複数の グリッドセルで構成される領域です。
gridItem 修飾子を使用すると、rowSpan パラメータと columnSpan パラメータでグリッド領域を指定できます。次の例では、カード #1 は 2 行 2 列で構成される領域に配置されています(図 2)。
Grid( config = { repeat(3) { column(160.dp) } repeat(3) { row(90.dp) } rowGap(8.dp) columnGap(8.dp) } ) { Card1(modifier = Modifier.gridItem(rowSpan = 2, columnSpan = 2)) Card2() Card3() Card4(modifier = Modifier.gridItem(columnSpan = 3)) }
グリッド領域の配置を設定する
グリッド領域の UI 要素の配置を設定するには、
alignment 修飾子の gridItem パラメータで指定します。
次の例では、#1 は 2 列 2 行で構成されるグリッド領域の中央に配置されています。
Grid( config = { repeat(3) { column(160.dp) } repeat(3) { row(90.dp) } rowGap(8.dp) columnGap(8.dp) }, ) { Text( text = "#1", modifier = Modifier .gridItem( rowSpan = 2, columnSpan = 2, alignment = Alignment.Center ), ) Card2() Card3() Card4(modifier = Modifier.gridItem(columnSpan = 3)) }
配置されたアイテムと混在する自動配置
位置が指定されていない Grid 内の UI 要素は自動配置されます。
この例では、自動配置された要素と、グリッドセルが指定された UI 要素を混在させる方法を示します。
カード #2 とカード #4 は指定されたグリッドセルで、他のアイテムは自動配置されます。
Grid( config = { repeat(2) { column(160.dp) } repeat(3) { row(90.dp) } rowGap(16.dp) columnGap(8.dp) } ) { Card1() Card2(modifier = Modifier.gridItem(row = 2, column = 2)) Card3() Card4(modifier = Modifier.gridItem(row = 3, column = 1)) Card5() Card6() }