Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
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
Des destinations cohérentes sur les écrans de l'application
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 évidence visuellement.
onClick() : fonction lambda obligatoire qui définit l'action à effectuer lorsque l'utilisateur clique sur l'élément. 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é ou chargez le contenu correspondant.
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 pour permettre aux utilisateurs de naviguer entre différents écrans d'une application :
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 actuellement sélectionné.
var selectedDestination by rememberSaveable {
mutableIntStateOf(startDestination.ordinal) } gère l'état de l'élément actuellement sélectionné.
startDestination.ordinal obtient l'index numérique (position) de l'entrée d'énumération Destination.SONGS.
Lorsqu'un élément est sélectionné, 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 visuellement en évidence l'élément sur lequel l'utilisateur a cliqué.
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 la barre de navigation résultant de l'extrait précédent :
Figure 2. Barre de navigation contenant trois destinations avec les icônes associées : "Titres", "Album" et "Playlist".
Le contenu et les exemples de code de cette page sont soumis aux licences décrites dans la Licence de contenu. Java et OpenJDK sont des marques ou des marques déposées d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/08/30 (UTC).
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Il n'y a pas l'information dont j'ai besoin","missingTheInformationINeed","thumb-down"],["Trop compliqué/Trop d'étapes","tooComplicatedTooManySteps","thumb-down"],["Obsolète","outOfDate","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Mauvais exemple/Erreur de code","samplesCodeIssue","thumb-down"],["Autre","otherDown","thumb-down"]],["Dernière mise à jour le 2025/08/30 (UTC)."],[],[],null,["The [navigation bar](https://m3.material.io/components/navigation-bar/overview) allows users to switch between destinations in an app. You\nshould use navigation bars for:\n\n- Three to five destinations of equal importance\n- Compact window sizes\n- Consistent destinations across app screens\n\n**Figure 1.** A navigation bar with 4 destinations.\n\nThis page shows you how to display a navigation bar in your app with related\nscreens and basic navigation.\n\nAPI surface\n\nUse the [`NavigationBar`](/reference/kotlin/androidx/compose/material3/package-summary#NavigationBar(androidx.compose.ui.Modifier,androidx.compose.ui.graphics.Color,androidx.compose.ui.graphics.Color,androidx.compose.ui.unit.Dp,androidx.compose.foundation.layout.WindowInsets,kotlin.Function1)) and [`NavigationBarItem`](/reference/kotlin/androidx/compose/material3/package-summary#(androidx.compose.foundation.layout.RowScope).NavigationBarItem(kotlin.Boolean,kotlin.Function0,kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Boolean,kotlin.Function0,kotlin.Boolean,androidx.compose.material3.NavigationBarItemColors,androidx.compose.foundation.interaction.MutableInteractionSource)) composables to\nimplement destination switching logic. Each `NavigationBarItem` represents a\nsingular destination.\n\n`NavigationBarItem` includes the following key parameters:\n\n- `selected`: Determines whether the current item is visually highlighted.\n- `onClick()`: A required lambda function that defines the action to be performed when the user clicks on the item. This is where you typically handle navigation events, update the selected item state, or load corresponding content.\n- `label`: Displays text within the item. Optional.\n- `icon`: Displays an icon within the item. Optional.\n\nExample: Bottom navigation bar\n\nThe following snippet implements a bottom navigation bar with items so users can\nnavigate between different screens in an app:\n| **Note:** The [full source code](https://github.com/android/snippets/blob/main/compose/snippets/src/main/java/com/example/compose/snippets/components/Navigation.kt) includes the code that establishes the basic navigation structure for the following example.\n\n\n```kotlin\n@Composable\nfun NavigationBarExample(modifier: Modifier = Modifier) {\n val navController = rememberNavController()\n val startDestination = Destination.SONGS\n var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) }\n\n Scaffold(\n modifier = modifier,\n bottomBar = {\n NavigationBar(windowInsets = NavigationBarDefaults.windowInsets) {\n Destination.entries.forEachIndexed { index, destination -\u003e\n NavigationBarItem(\n selected = selectedDestination == index,\n onClick = {\n navController.navigate(route = destination.route)\n selectedDestination = index\n },\n icon = {\n Icon(\n destination.icon,\n contentDescription = destination.contentDescription\n )\n },\n label = { Text(destination.label) }\n )\n }\n }\n }\n ) { contentPadding -\u003e\n AppNavHost(navController, startDestination, modifier = Modifier.padding(contentPadding))\n }\n}https://github.com/android/snippets/blob/f95ab59fad80aeaf5d6a90bab8a01a126f20f44e/compose/snippets/src/main/java/com/example/compose/snippets/components/Navigation.kt#L117-L148\n```\n\n\u003cbr /\u003e\n\nKey points\n\n- `NavigationBar` displays a collection of items, with each item corresponding to a `Destination`.\n- `val navController = rememberNavController()` creates and remembers an instance of [`NavHostController`](/reference/androidx/navigation/NavHostController), which manages the navigation within a [`NavHost`](/reference/androidx/navigation/NavHost).\n- `var selectedDestination by rememberSaveable {\n mutableIntStateOf(startDestination.ordinal)` } manages the state of the currently selected item.\n- `var selectedDestination by rememberSaveable {\n mutableIntStateOf(startDestination.ordinal) }` manages the state of the currently selected item.\n - `startDestination.ordinal` gets the numerical index (position) of the `Destination.SONGS` enum entry.\n- When an item is clicked, `navController.navigate(route = destination.route)` is called to navigate to the corresponding screen.\n- The `onClick` lambda of the `NavigationBarItem` updates the `selectedDestination` state to visually highlight the clicked item.\n- It calls the `AppNavHost` composable, passing the `navController` and `startDestination`, to display the actual content of the selected screen.\n\nResult\n\nThe following image shows the navigation bar resulting from the previous\nsnippet:\n**Figure 2.** A navigation bar that contains 3 destinations with associated icons: Songs, Album, and Playlist.\n\nAdditional resources\n\n- [Material 3 - Navigation Bar](https://m3.material.io/components/navigation-bar/overview)\n- [Navigation with Compose](/develop/ui/compose/navigation)"]]