Barre de navigation

La barre de navigation permet aux utilisateurs de passer d'une destination à une autre dans une application. Vous devez utiliser des barres de navigation pour :

  • Trois à cinq destinations d'importance égale
  • Tailles de fenêtre compactes
  • Destinations cohérentes sur les écrans de l'application
Barre de navigation avec quatre destinations. Chaque destination possède un nom d'espace réservé appelé "Label". La destination sélectionnée s'affiche avec une icône en forme de cercle, et les autres destinations sont représentées par des triangles.
Figure 1. Barre de navigation avec quatre destinations.

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

Surface d'API

Utilisez les composables NavigationBar et NavigationBarItem pour implémenter la logique de changement de destination. Chaque NavigationBarItem représente une destination unique.

NavigationBarItem inclut les paramètres clés suivants :

  • selected : détermine si l'élément actuel est mis en surbrillance visuellement.
  • onClick() : définit l'action à effectuer lorsque l'utilisateur clique sur l'élément. La logique de gestion des événements de navigation, de mise à jour de l'état de l'élément sélectionné ou de chargement du contenu correspondant doit être placée ici.
  • label : affiche du texte dans l'élément. Facultatif.
  • icon : affiche une icône dans l'élément. Facultatif.

Exemple : Barre de navigation inférieure

L'extrait de code suivant implémente une barre de navigation inférieure avec des éléments permettant aux utilisateurs de naviguer entre les différents écrans d'une application :

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

Points essentiels

  • NavigationBar affiche une collection d'éléments, chacun 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é.
    • startDestination.ordinal obtient l'index numérique (position) de l'entrée d'énumération Destination.SONGS.
  • Lorsqu'un utilisateur clique sur un élément, navController.navigate(route = destination.route) est appelé pour accéder à l'écran correspondant.
  • Le lambda onClick de NavigationBarItem met à jour l'état selectedDestination pour mettre en surbrillance l'élément cliqué.
  • La logique de navigation 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 la barre de navigation obtenue à partir de l'extrait de code précédent :

Écran d'application avec trois destinations listées horizontalement dans une barre de navigation inférieure : "Songs" (Titres), "Album" et "Playlist". Chaque destination est associée à une icône pertinente (par exemple, une note de musique pour "Titres").
Figure 2. Une barre de navigation contenant trois destinations avec les icônes associées : "Songs" (Titres), "Album" et "Playlist".

Ressources supplémentaires