Los rieles proporcionan acceso a los destinos en las apps que se ejecutan en dispositivos con pantallas grandes. Deberías usar rieles de navegación para lo siguiente:
- Destinos de nivel superior a los que se debe poder acceder desde cualquier lugar de una app
- De tres a siete destinos principales
- Diseños para tablets o computadoras de escritorio
En esta página, se muestra cómo mostrar rieles en tu app con pantallas relacionadas y navegación básica.
Superficie de la API
Usa el elemento componible NavigationRail con NavigationRailItem para implementar un riel en tu aplicación. El NavigationRailItem representa un solo elemento de riel en la columna de riel.
NavigationRailItem incluye los siguientes parámetros clave:
selected: Determina si el elemento de riel actual se destaca visualmente.onClick(): Es una función lambda obligatoria que define la acción que se realizará cuando el usuario haga clic en el elemento de la barra lateral. Aquí es donde sueles controlar los eventos de navegación, actualizar el estado del elemento de riel seleccionado o cargar el contenido correspondiente.label: Muestra texto dentro del elemento de riel. Opcional.icon: Muestra un ícono dentro del elemento de riel. Opcional.
Ejemplo: Navegación basada en rieles
En el siguiente fragmento, se implementa un riel de navegación para que los usuarios puedan navegar entre diferentes pantallas de una app:
@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) } }
Puntos clave
NavigationRailmuestra una columna vertical de elementos de riel, en la que cada elemento corresponde a unDestination.val navController = rememberNavController()crea y recuerda una instancia deNavHostController, que administra la navegación dentro de unNavHost.var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) }administra el estado del elemento de riel seleccionado.startDestination.ordinalobtiene el índice numérico (posición) de la entrada de enumeraciónDestination.SONGS.
- Cuando se hace clic en un elemento del riel, se llama a
navController.navigate(route = destination.route)para navegar a la pantalla correspondiente. - La lambda
onClickdeNavigationRailItemactualiza el estadoselectedDestinationpara destacar visualmente el elemento del riel en el que se hizo clic. - Llama al elemento de componibilidad
AppNavHosty pasanavControllerystartDestinationpara mostrar el contenido real de la pantalla seleccionada.
Resultado
En la siguiente imagen, se muestra el resultado del fragmento anterior: