このレシピでは、Grid API でコードの可読性がどのように向上するかを示します。自動サイズ調整トラックを構成することで、テキスト コンポーザブルの固有サイズに基づいてセルの幅と高さに動的に適応するグリッドを作成できます。
このレシピでは、Grid API を使用してテーブルを作成します。
| レイアウト | 遅延読み込み | ソフトラップ | 動的レイアウトの更新 | |
|---|---|---|---|---|
FlexBox |
1 日 | 非対応 | ○ | ○ |
Grid |
2D | 非対応 | いいえ | ○ |
ベスト プラクティス
Grid コンポーザブルを使用して、テーブルの可読性と保守性を向上させます。Grid を使用すると、幅を手動で同期することなく、すべての行の列のサイズと配置を正確に制御できます。
材料
Grid: アイテムを 2 次元グリッドに配置するコンポーザブル レイアウト。 レイアウト構成はconfigラムダ パラメータ内で指定し、UI コンテンツ アイテムはcontentラムダ パラメータ内で宣言します。GridTrackSize.Auto: コンテンツの固有サイズに基づいて、グリッド 構成内で自動トラック サイズを指定します(例:column(GridTrackSize.Auto)、row(GridTrackSize.Auto))。gap():GridConfigurationScope内の行間と列間隔を構成します(例:gap(row = 8.dp, column = 16.dp))。
手順
すべてのアイテムに対して列の自動配置とトラック サイズ設定を行う単一の Grid レイアウトを使用して、複数列の比較テーブルを作成します。
1. グリッドの行と列をカウントしてトラック サイズを決定する
まず、列と行をカウントしてトラックのサイズを決定します。
- 列: 比較する属性の数に、アイテム名の列を 1 つ加えた数。
- 行: 比較するアイテムの数に、ヘッダー行を 1 つ加えた数。
このレシピでは、4 つの属性で 2 つのコンポーネント(FlexBox と Grid)を比較するため、5 列と 3 行が必要です。
2. Grid を使用して比較テーブルを実装する
テーブル アイテムをレイアウトする Grid を使用する TableInGrid コンポーザブルを作成します。config ラムダ内で column 関数と row 関数を呼び出してトラック サイズを定義し、gap() でセル間隔を設定します。テキストには固有サイズがあるため、GridTrackSize.Auto はコンテンツに合わせて列と行のサイズを自動的に調整します。
content ラムダ内にテーブル ヘッダーとデータを配置します。Grid は、すべてのセルの配置と配置を自動的に処理します。
@Composable fun TableInGrid( modifier: Modifier = Modifier, ) { Grid( config = { column(GridTrackSize.Auto) column(GridTrackSize.Auto) column(GridTrackSize.Auto) column(GridTrackSize.Auto) column(GridTrackSize.Auto) row(GridTrackSize.Auto) row(GridTrackSize.Auto) row(GridTrackSize.Auto) gap(row = 8.dp, column = 16.dp) }, modifier = modifier, ) { // Table Header Text(text = "", fontWeight = FontWeight.Bold) Text(text = "Layout", fontWeight = FontWeight.Bold) Text(text = "Lazy loading", fontWeight = FontWeight.Bold) Text(text = "Soft wrap", fontWeight = FontWeight.Bold) Text(text = "Dynamic layout update", fontWeight = FontWeight.Bold) // FlexBox Row Text(text = "FlexBox", fontWeight = FontWeight.Bold) Text(text = "1D") Text(text = "No") Text(text = "Yes") Text(text = "Yes") // Grid Row Text(text = "Grid", fontWeight = FontWeight.Bold) Text(text = "2D") Text(text = "No") Text(text = "No") Text(text = "Yes") } }
結果
列の自動配置とセル間隔設定を備えた、クリーンな 2 次元比較テーブルが作成されました。
Grid を使用した比較テーブル。