グリッド

Grid は、2 次元レイアウトを柔軟に実装できる Jetpack Compose API です。 この API を使用すると、使用可能なコンテナサイズに合わせて調整される複数列または複数行のレイアウトでアイテムを表示できます。

Grid を使用した柔軟でアダプティブな 2 次元レイアウト
図 1.Grid を使用した柔軟で適応性のある 2 次元レイアウト。

Grid は類似のコンポーザブルとどう違うのですか?

Compose には、LazyVerticalGrid などの類似のコンポーネントがすでに用意されています。 これらのコンポーネントは主に、大規模で均質なデータセットの視覚化を目的としています。たとえば、動画ストリーミング アプリでコンテンツ カタログを表示する場合などです。これらのコンポーネントは、画面や複雑なコンポーネントの構造レイアウト用に設計されていません。

複数の Row コンポーザブルと Column コンポーザブルを組み合わせることで、2 次元レイアウトを実装することもできます。 ただし、この方法には、階層が深くなる、適応が難しいなどのデメリットがあります。

次の表に、各 API に適したレイアウトの概要を示します。

コンポーネント 目的
LazyVerticalGridLazyStaggeredGridLazyHorizontalGrid 遅延読み込みが必要な大規模で均質なデータセットの視覚化。
RowColumnFlexBox 1 次元レイアウト
Grid 2 次元レイアウト

用語

Grid の仕組みを理解するには、次の用語をよく理解してください。

グリッド線

グリッドは、水平方向と垂直方向に伸びる線で構成されています。 グリッドに 3 行ある場合、最後の行の後の線を含めて 4 本の水平線があります。 次の図では、点線がグリッド線を表しています。

グリッドは 4 本の横線と 3 本の縦線で構成されています。
図 2. グリッドは、4 本の水平線と 3 本の垂直線で構成されています。

グリッド トラック

グリッド トラックは、2 本のグリッド線の間のスペースです。 行トラックは 2 本の水平線の間にあり、列トラックは 2 本の垂直線の間にあります。 これらのトラックのサイズを定義するには、グリッドの作成時にサイズを割り当てます。

最初の行のグリッド トラック。
図 3. 最初の行のグリッド トラック。

グリッドセル

グリッドセルは、行トラックと列トラックの交点です。

2 行目と 2 列目の交差部分にあるグリッドセル。
図 4. 2 行目と 2 列目の交点にあるグリッドセル。

グリッド領域

グリッド領域は、複数のグリッドセルで構成されます。 アイテムを複数のトラックにまたがるようにすることで、グリッド領域を定義できます。

4 つのグリッドセルで構成されるグリッド領域。
図 5. 4 つのグリッドセルで構成されるグリッド領域。

グリッドギャップ

グリッドギャップは、グリッド トラック間のガターです。 ギャップに UI 要素を配置することはできませんが、UI 要素をまたがらせることはできます。

最初の列と 2 番目の列の間のグリッドギャップ。
図 6. 1 列目と 2 列目の間のグリッドギャップ。