Rail de navigation

Les rails permettent d'accéder aux destinations dans les applications qui s'exécutent sur des appareils à grand écran. Vous devez utiliser des rails de navigation pour :

  • Destinations de premier niveau qui doivent être accessibles n'importe où dans une application
  • Trois à sept destinations principales
  • Mises en page pour tablette ou ordinateur de bureau
Rail de navigation vertical sur le côté gauche d'un écran avec quatre destinations (Tous les fichiers, Récents, Photos et Bibliothèque), chacune avec une icône associée, et un bouton d'action flottant.
Figure 1. Rail de navigation avec quatre destinations et un bouton d'action flottant.

Cette page vous explique comment afficher des rails dans votre application avec des écrans associés et une navigation de base.

Surface d'API

Utilisez le composable NavigationRail avec NavigationRailItem pour implémenter un rail dans votre application. NavigationRailItem représente un seul élément de rail dans la colonne de rail.

NavigationRailItem inclut les paramètres clés suivants :

  • selected : détermine si l'élément de rail actuel est mis en évidence visuellement.
  • onClick() : fonction lambda obligatoire qui définit l'action à effectuer lorsque l'utilisateur clique sur l'élément de la barre de navigation. C'est là que vous gérez généralement les événements de navigation, mettez à jour l'état de l'élément sélectionné dans le rail ou chargez le contenu correspondant.
  • label : affiche du texte dans l'élément du rail. Facultatif.
  • icon : affiche une icône dans l'élément du rail. Facultatif.

Exemple : Navigation basée sur un rail

L'extrait de code suivant implémente un rail de navigation afin que les utilisateurs puissent naviguer entre les différents écrans d'une application :

@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)
    }
}

Points essentiels

  • NavigationRail affiche une colonne verticale d'éléments de rail, chaque élément correspondant à un Destination.
  • val navController = rememberNavController() crée et mémorise une instance de NavHostController, qui gère la navigation dans un NavHost.
  • var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) } gère l'état de l'élément sélectionné dans le rail.
    • startDestination.ordinal obtient l'index numérique (position) de l'entrée d'énumération Destination.SONGS.
  • Lorsque l'utilisateur clique sur un élément du rail, navController.navigate(route = destination.route) est appelé pour accéder à l'écran correspondant.
  • Le lambda onClick de NavigationRailItem met à jour l'état selectedDestination pour mettre en évidence visuellement l'élément de rail sélectionné.
  • Il appelle le composable AppNavHost, en transmettant navController et startDestination, pour afficher le contenu réel de l'écran sélectionné.

Résultat

L'image suivante montre le résultat de l'extrait de code précédent :

Rail de navigation vertical avec trois destinations et les icônes associées : "Titres", "Album" et "Playlist". Les icônes indiquent visuellement l'objectif de chaque bouton de navigation dans le rail. Chaque destination est associée à une icône pertinente (par exemple, une note de musique pour "Titres").
Figure 2. Un rail de navigation contenant trois destinations avec les icônes associées : Songs, Album et Playlist.

Ressources supplémentaires