Zadbaj o dobrą organizację dzięki kolekcji
Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.
Paski zapewniają dostęp do miejsc docelowych w aplikacjach działających na urządzeniach z dużymi ekranami. Pasków nawigacyjnych należy używać w przypadku:
Miejsca docelowe najwyższego poziomu, które muszą być dostępne w dowolnym miejscu w aplikacji
3–7 głównych miejsc docelowych
Układy na tablety i komputery
Rysunek 1. Panel nawigacyjny z 4 miejscami docelowymi i pływającym przyciskiem polecenia.
Z tej strony dowiesz się, jak wyświetlać w aplikacji sekcje z powiązanymi ekranami i podstawową nawigacją.
Powierzchnia interfejsu API
Użyj komponentu NavigationRail z parametrem NavigationRailItem, aby zaimplementować pasek w aplikacji. NavigationRailItem to pojedynczy element w kolumnie sekcji.
NavigationRailItem obejmuje te kluczowe parametry:
selected: określa, czy bieżący element sekcji jest wizualnie wyróżniony.
onClick(): wymagana funkcja lambda, która określa działanie, jakie ma zostać wykonane, gdy użytkownik kliknie element sekcji. Zazwyczaj obsługujesz tu zdarzenia nawigacyjne, aktualizujesz stan wybranego elementu paska lub wczytujesz odpowiednie treści.
label: Wyświetla tekst w elemencie sekcji. Opcjonalnie:
icon: Wyświetla ikonę w elemencie sekcji. Opcjonalnie:
Przykład: nawigacja oparta na kolei
Poniższy fragment kodu implementuje kolumnę nawigacji, dzięki czemu użytkownicy mogą przechodzić między różnymi ekranami w aplikacji:
Gdy klikniesz element paska, wywoływana jest funkcja navController.navigate(route =
destination.route), aby przejść do odpowiedniego ekranu.
Funkcja onClick lambda NavigationRailItem aktualizuje stan, aby wizualnie wyróżnić kliknięty element szyny.selectedDestination
Wywołuje funkcję kompozycyjną AppNavHost, przekazując do niej funkcje navController i startDestination, aby wyświetlić rzeczywistą zawartość wybranego ekranu.
Wynik
Na ilustracji poniżej widać wynik działania poprzedniego fragmentu kodu:
Rysunek 2. Pasek nawigacyjny zawierający 3 miejsca docelowe z powiązanymi ikonami: Utwory, Album i Lista odtwarzania.
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.
[null,null,["Ostatnia aktualizacja: 2025-08-28 UTC."],[],[],null,["Rails provide access to destinations in apps that run on devices with large\nscreens. You should use navigation rails for:\n\n- Top-level destinations that need to be accessible anywhere in an app\n- Three to seven main destinations\n- Tablet or desktop layouts\n\n**Figure 1.** A navigation rail with four destinations and a floating action button.\n\nThis page shows you how to display rails in your app with related screens and\nbasic navigation.\n\nAPI surface\n\nUse the [`NavigationRail`](/reference/kotlin/androidx/compose/material3/package-summary#NavigationRail(androidx.compose.ui.Modifier,androidx.compose.ui.graphics.Color,androidx.compose.ui.graphics.Color,kotlin.Function1,androidx.compose.foundation.layout.WindowInsets,kotlin.Function1)) composable with [`NavigationRailItem`](/reference/kotlin/androidx/compose/material3/package-summary#NavigationRailItem(kotlin.Boolean,kotlin.Function0,kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Boolean,kotlin.Function0,kotlin.Boolean,androidx.compose.material3.NavigationRailItemColors,androidx.compose.foundation.interaction.MutableInteractionSource)) to\nimplement a rail in your application. The `NavigationRailItem` represents a\nsingle rail item in the rail column.\n\n`NavigationRailItem` includes the following key parameters:\n\n- `selected`: Determines whether the current rail item is visually highlighted.\n- `onClick()`: A required lambda function that defines the action to be performed when the user clicks on the rail item. This is where you typically handle navigation events, update the selected rail item state, or load corresponding content.\n- `label`: Displays text within the rail item. Optional.\n- `icon`: Displays an icon within the rail item. Optional.\n\nExample: Rail-based navigation\n\nThe following snippet implements a navigation rail so users can navigate between\ndifferent 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 NavigationRailExample(modifier: Modifier = Modifier) {\n val navController = rememberNavController()\n val startDestination = Destination.SONGS\n var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) }\n\n Scaffold(modifier = modifier) { contentPadding -\u003e\n NavigationRail(modifier = Modifier.padding(contentPadding)) {\n Destination.entries.forEachIndexed { index, destination -\u003e\n NavigationRailItem(\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 AppNavHost(navController, startDestination)\n }\n}https://github.com/android/snippets/blob/7a0ebbee11495f628cf9d574f6b6069c2867232a/compose/snippets/src/main/java/com/example/compose/snippets/components/Navigation.kt#L153-L180\n```\n\n\u003cbr /\u003e\n\nKey points\n\n- `NavigationRail` displays a vertical column of rail 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 rail item.\n - `startDestination.ordinal` gets the numerical index (position) of the `Destination.SONGS` enum entry.\n- When a rail item is clicked, `navController.navigate(route =\n destination.route)` is called to navigate to the corresponding screen.\n- The `onClick` lambda of the `NavigationRailItem` updates the `selectedDestination` state to visually highlight the clicked rail 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 result of the previous snippet:\n**Figure 2.** A navigation rail that contains 3 destinations with associated icons: Songs, Album, and Playlist.\n\nAdditional resources\n\n- [Material 3 - Navigation rail](https://m3.material.io/components/navigation-rail/overview)\n- [Navigation with Compose](/develop/ui/compose/navigation)"]]