Los rieles proporcionan acceso a destinos en apps que se ejecutan en dispositivos con pantallas grandes. Debes 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
- Entre tres y siete destinos principales
- Diseños para tablets o computadoras

En esta página, se muestra cómo mostrar rieles en tu app con pantallas relacionadas y una navegación básica.
Plataforma 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 del 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 del riel. Por lo general, aquí es donde se controlan los eventos de navegación, se actualiza el estado del elemento de riel seleccionado o se carga el contenido correspondiente.label
: Muestra texto dentro del elemento del riel. Opcional.icon
: Muestra un ícono dentro del elemento del riel. Opcional.
Ejemplo: Navegación basada en rieles
El siguiente fragmento 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
NavigationRail
muestra una columna vertical de elementos de riel, cada uno de los cuales 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 actualmente.startDestination.ordinal
obtiene 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
onClick
deNavigationRailItem
actualiza el estadoselectedDestination
para destacar visualmente el elemento del riel en el que se hizo clic. - Llama al elemento componible
AppNavHost
y pasanavController
ystartDestination
para mostrar el contenido real de la pantalla seleccionada.
Resultado
En la siguiente imagen, se muestra el resultado del fragmento anterior:
