Navigationsleisten bieten Zugriff auf Ziele in Apps, die auf Geräten mit großen Bildschirmen ausgeführt werden. Navigationsleisten sollten für Folgendes verwendet werden:
- Ziele auf oberster Ebene, die von überall in einer App aus zugänglich sein müssen
- Drei bis sieben Hauptziele
- Tablet- oder Desktop-Layouts
Auf dieser Seite wird beschrieben, wie Sie in Ihrer App Schienen mit zugehörigen Bildschirmen und grundlegender Navigation anzeigen.
API-Oberfläche
Verwenden Sie das Compose-Element NavigationRail mit NavigationRailItem, um eine Navigationsleiste in Ihrer Anwendung zu implementieren. NavigationRailItem steht für ein einzelnes Element in der Spalte.
NavigationRailItem enthält die folgenden Schlüsselparameter:
selectedgibt an, ob das aktuelle Element in der Leiste visuell hervorgehoben wird.onClick(): Eine erforderliche Lambda-Funktion, die die Aktion definiert, die ausgeführt werden soll, wenn der Nutzer auf das Element in der Navigationsleiste klickt. Hier werden in der Regel Navigationsereignisse verarbeitet, der Status des ausgewählten Elements in der Leiste aktualisiert oder entsprechende Inhalte geladen.label: Zeigt Text im Rail-Element an. Optional.iconzeigt ein Symbol im Element der Leiste an. Optional.
Beispiel: Schienenbasierte Navigation
Im folgenden Snippet wird eine Navigationsleiste implementiert, mit der Nutzer zwischen verschiedenen Bildschirmen in einer App wechseln können:
@Composable fun NavigationRailExample(modifier: Modifier = Modifier) { val navController = rememberNavController() val startDestination = Destination.SONGS var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) } Scaffold(modifier = modifier) { contentPadding -> NavigationRail(modifier = Modifier.padding(contentPadding)) { Destination.entries.forEachIndexed { index, destination -> NavigationRailItem( selected = selectedDestination == index, onClick = { navController.navigate(route = destination.route) selectedDestination = index }, icon = { Icon( destination.icon, contentDescription = destination.contentDescription ) }, label = { Text(destination.label) } ) } } AppNavHost(navController, startDestination) } }
Wichtige Fakten
NavigationRailzeigt eine vertikale Spalte mit Rail-Elementen an, wobei jedes Element einemDestinationentspricht.val navController = rememberNavController()erstellt eine Instanz vonNavHostControllerund speichert sie. Diese Instanz verwaltet die Navigation innerhalb einesNavHost.var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) }verwaltet den Status des ausgewählten Rail-Elements.startDestination.ordinalruft den numerischen Index (Position) des Enum-EintragsDestination.SONGSab.
- Wenn auf ein Element in der Navigationsleiste geklickt wird, wird
navController.navigate(route = destination.route)aufgerufen, um zum entsprechenden Bildschirm zu gelangen. - Der Lambda-Ausdruck
onClickvonNavigationRailItemaktualisiert den StatusselectedDestination, um das angeklickte Element in der Navigationsleiste visuell hervorzuheben. - Dazu wird die kombinierbare Funktion
AppNavHostaufgerufen undnavControllerundstartDestinationübergeben, um den tatsächlichen Inhalt des ausgewählten Bildschirms anzuzeigen.
Ergebnis
Die folgende Abbildung zeigt das Ergebnis des vorherigen Snippets:
