ナビゲーション バーを使用すると、アプリ内のデスティネーションを切り替えることができます。ナビゲーション バーは、次のような場合に使用する必要があります。
- 重要度が同等の 3 ~ 5 個の目的地
- コンパクトなウィンドウ サイズ
- アプリの画面間で一貫した移動先
このページでは、関連する画面と基本的なナビゲーションを含むナビゲーション バーをアプリに表示する方法について説明します。
API サーフェス
NavigationBar コンポーザブルと NavigationBarItem コンポーザブルを使用して、宛先切り替えロジックを実装します。各 NavigationBarItem は単一の宛先を表します。
NavigationBarItem には、次の主なパラメータが含まれています。
selected: 現在のアイテムが視覚的にハイライト表示されるかどうかを決定します。onClick(): ユーザーがアイテムをクリックしたときに実行されるアクションを定義します。ナビゲーション イベントの処理、選択したアイテムの状態の更新、対応するコンテンツの読み込みのロジックはここに属します。label: アイテム内にテキストを表示します。省略可能。icon: アイテム内にアイコンを表示します。省略可能。
例: ボトム ナビゲーション バー
次のスニペットは、アイテムがあるボトム ナビゲーション バーを実装して、ユーザーがアプリ内のさまざまな画面を移動できるようにします。
@Composable fun NavigationBarExample(modifier: Modifier = Modifier) { val navController = rememberNavController() val startDestination = Destination.SONGS var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) } Scaffold( modifier = modifier, bottomBar = { NavigationBar(windowInsets = NavigationBarDefaults.windowInsets) { Destination.entries.forEachIndexed { index, destination -> NavigationBarItem( selected = selectedDestination == index, onClick = { navController.navigate(route = destination.route) selectedDestination = index }, icon = { Icon( destination.icon, contentDescription = destination.contentDescription ) }, label = { Text(destination.label) } ) } } } ) { contentPadding -> AppNavHost(navController, startDestination, modifier = Modifier.padding(contentPadding)) } }
要点
NavigationBarにはアイテムのコレクションが表示され、各アイテムはDestinationに対応しています。val navController = rememberNavController()は、NavHost内のナビゲーションを管理するNavHostControllerのインスタンスを作成して記憶します。var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) }は、選択されたアイテムの状態を管理します。startDestination.ordinalはDestination.SONGS列挙型エントリの数値インデックス(位置)を取得します。
- アイテムがクリックされると、
navController.navigate(route = destination.route)が呼び出され、対応する画面に移動します。 NavigationBarItemのonClickラムダは、クリックされたアイテムを視覚的にハイライト表示するようにselectedDestination状態を更新します。- ナビゲーション ロジックは、
navControllerとstartDestinationを渡してAppNavHostコンポーザブルを呼び出し、選択した画面の実際のコンテンツを表示します。
結果
次の画像は、前のスニペットの結果として表示されるナビゲーション バーを示しています。