Zadbaj o dobrą organizację dzięki kolekcji
Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.
Pasek nawigacyjny umożliwia użytkownikom przełączanie się między miejscami docelowymi w aplikacji. Pasków nawigacyjnych należy używać w przypadku:
3–5 miejsc docelowych o równym znaczeniu
Kompaktowe rozmiary okien
Spójne miejsca docelowe na różnych ekranach aplikacji
Rysunek 1. Pasek nawigacyjny z 4 miejscami docelowymi.
Na tej stronie dowiesz się, jak wyświetlać w aplikacji pasek nawigacyjny z powiązanymi ekranami i podstawową nawigacją.
Powierzchnia interfejsu API
Użyj komponentów NavigationBar i NavigationBarItem, aby wdrożyć logikę przełączania miejsc docelowych. Każdy symbol NavigationBarItem reprezentuje jedno miejsce docelowe.
NavigationBarItem obejmuje te kluczowe parametry:
selected: określa, czy bieżący element jest wizualnie wyróżniony.
onClick(): wymagana funkcja lambda, która określa działanie, jakie ma zostać wykonane, gdy użytkownik kliknie element. Zwykle obsługujesz tu zdarzenia nawigacji, aktualizujesz stan wybranego elementu lub wczytujesz odpowiednią treść.
label: wyświetla tekst w elemencie. Opcjonalnie:
icon: Wyświetla ikonę w produkcie. Opcjonalnie:
Przykład: dolny pasek nawigacyjny
Poniższy fragment kodu implementuje pasek dolnej nawigacji z elementami, dzięki którym użytkownicy mogą przechodzić między różnymi ekranami w aplikacji:
Gdy klikniesz element, wywoływana jest funkcja navController.navigate(route = destination.route), która powoduje przejście do odpowiedniego ekranu.
Funkcja onClick lambda funkcji NavigationBarItem aktualizuje stan selectedDestination, aby wizualnie wyróżnić kliknięty element.
Wywołuje funkcję kompozycyjną AppNavHost, przekazując do niej funkcje navController i startDestination, aby wyświetlić rzeczywistą zawartość wybranego ekranu.
Wynik
Obraz poniżej przedstawia pasek nawigacyjny, który powstał na podstawie poprzedniego fragmentu kodu:
Rysunek 2. Pasek nawigacyjny z 3 miejscami docelowymi i powiązanymi ikonami: Utwory, Album i Playlista.
Treść strony i umieszczone na niej fragmenty kodu podlegają licencjom opisanym w Licencji na treści. Java i OpenJDK są znakami towarowymi lub zastrzeżonymi znakami towarowymi należącymi do firmy Oracle lub jej podmiotów stowarzyszonych.
Ostatnia aktualizacja: 2025-08-28 UTC.
[[["Łatwo zrozumieć","easyToUnderstand","thumb-up"],["Rozwiązało to mój problem","solvedMyProblem","thumb-up"],["Inne","otherUp","thumb-up"]],[["Brak potrzebnych mi informacji","missingTheInformationINeed","thumb-down"],["Zbyt skomplikowane / zbyt wiele czynności do wykonania","tooComplicatedTooManySteps","thumb-down"],["Nieaktualne treści","outOfDate","thumb-down"],["Problem z tłumaczeniem","translationIssue","thumb-down"],["Problem z przykładami/kodem","samplesCodeIssue","thumb-down"],["Inne","otherDown","thumb-down"]],["Ostatnia aktualizacja: 2025-08-28 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/7a0ebbee11495f628cf9d574f6b6069c2867232a/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)"]]