タブを使用すると、関連するコンテンツのグループを整理できます。タブには次の 2 種類があります。
- プライマリ タブ: 上部のアプリバーの下のコンテンツ ペインの上部に配置されます。メイン コンテンツの宛先を表示し、タブのセットが 1 つだけ必要な場合に使用します。
- セカンダリ タブ: コンテンツ エリア内で使用され、関連コンテンツをさらに分離して階層を確立します。画面に複数のレベルのタブが必要な場合に必要です。
このページでは、関連する画面と基本的なナビゲーションを使用して、アプリにメインタブを表示する方法について説明します。
API サーフェス
Tab、PrimaryTabRow、SecondaryTabRow のコンポーザブルを使用してタブを実装します。Tab コンポーザブルは行内の個々のタブを表し、通常は PrimaryTabRow(メイン インジケーター タブの場合)または SecondaryTabRow(セカンダリ インジケーター タブの場合)内で使用されます。
Tab には次の主なパラメータが含まれています。
selected: 現在のタブが視覚的にハイライト表示されるかどうかを決定します。onClick(): ユーザーがタブをクリックしたときに実行されるアクションを定義する必須のラムダ関数。通常、ここでナビゲーション イベントを処理し、選択したタブの状態を更新するか、対応するコンテンツを読み込みます。text: タブ内にテキストを表示します。省略可。icon: タブ内にアイコンを表示します。省略可。enabled: タブが有効で、操作可能かどうかを制御します。false に設定すると、タブは無効な状態で表示され、クリックに応答しません。
例: タブベースのナビゲーション
次のスニペットは、アプリ内の異なる画面間を移動するためのタブ付きのトップ ナビゲーション バーを実装しています。
@Composable fun NavigationTabExample(modifier: Modifier = Modifier) { val navController = rememberNavController() val startDestination = Destination.SONGS var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) } Scaffold(modifier = modifier) { contentPadding -> PrimaryTabRow(selectedTabIndex = selectedDestination, modifier = Modifier.padding(contentPadding)) { Destination.entries.forEachIndexed { index, destination -> Tab( selected = selectedDestination == index, onClick = { navController.navigate(route = destination.route) selectedDestination = index }, text = { Text( text = destination.label, maxLines = 2, overflow = TextOverflow.Ellipsis ) } ) } } AppNavHost(navController, startDestination) } }
要点
PrimaryTabRowは、タブの水平行を表示します。各タブはDestinationに対応しています。val navController = rememberNavController()は、NavHost内のナビゲーションを管理するNavHostControllerのインスタンスを作成して記憶します。var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) }は、選択したタブの状態を管理します。startDestination.ordinalはDestination.SONGS列挙型エントリの数値インデックス(位置)を取得します。
- タブをクリックすると、
onClickラムダがnavController.navigate(route = destination.route)を呼び出して、対応する画面に移動します。 TabのonClickラムダは、クリックされたタブを視覚的にハイライト表示するためにselectedDestination状態を更新します。AppNavHostコンポーザブルを呼び出し、navControllerとstartDestinationを渡して、選択した画面の実際のコンテンツを表示します。
結果
次の画像は、前のスニペットの結果を示しています。
![アプリ画面の上部に横並びで配置された 3 つのタブ。タブは [曲]、[アルバム]、[プレイリスト] で、[曲] タブが選択され、下線が引かれています。](https://developer.android.com/static/develop/ui/compose/images/Tabs (1).png?authuser=7&hl=ja)