Tetap teratur dengan koleksi
Simpan dan kategorikan konten berdasarkan preferensi Anda.
Panel navigasi memungkinkan pengguna beralih antar-tujuan dalam aplikasi. Anda
harus menggunakan panel navigasi untuk:
Tiga hingga lima tujuan yang sama pentingnya
Ukuran jendela ringkas
Tujuan yang konsisten di seluruh layar aplikasi
Gambar 1. Menu navigasi dengan 4 tujuan.
Halaman ini menunjukkan cara menampilkan panel navigasi di aplikasi Anda dengan layar terkait dan navigasi dasar.
Platform API
Gunakan composable NavigationBar dan NavigationBarItem untuk
menerapkan logika penggantian tujuan. Setiap NavigationBarItem mewakili
tujuan tunggal.
NavigationBarItem mencakup parameter utama berikut:
selected: Menentukan apakah item saat ini ditandai secara visual.
onClick(): Fungsi lambda wajib yang menentukan tindakan yang akan
dilakukan saat pengguna mengklik item. Di sinilah Anda biasanya menangani
peristiwa navigasi, memperbarui status item yang dipilih, atau memuat
konten yang sesuai.
label: Menampilkan teks dalam item. Opsional.
icon: Menampilkan ikon dalam item. Opsional.
Contoh: Menu navigasi bawah
Cuplikan berikut menerapkan menu navigasi bawah dengan item sehingga pengguna dapat
berpindah di antara layar yang berbeda dalam aplikasi:
NavigationBar menampilkan kumpulan item, dengan setiap item sesuai
dengan Destination.
val navController = rememberNavController() membuat dan mengingat instance
NavHostController, yang mengelola navigasi dalam
NavHost.
var selectedDestination by rememberSaveable {
mutableIntStateOf(startDestination.ordinal) } mengelola status
item yang dipilih saat ini.
var selectedDestination by rememberSaveable {
mutableIntStateOf(startDestination.ordinal) } mengelola status
item yang dipilih saat ini.
startDestination.ordinal mendapatkan indeks numerik (posisi) entri enum
Destination.SONGS.
Saat item diklik, navController.navigate(route = destination.route)
dipanggil untuk membuka layar yang sesuai.
Lambda onClick dari NavigationBarItem memperbarui status
selectedDestination untuk menyoroti item yang diklik secara visual.
Composable ini memanggil composable AppNavHost, meneruskan navController dan
startDestination, untuk menampilkan konten sebenarnya dari layar yang dipilih.
Hasil
Gambar berikut menampilkan menu navigasi yang dihasilkan dari cuplikan
sebelumnya:
Gambar 2. Menu navigasi yang berisi 3 tujuan dengan ikon terkait: Lagu, Album, dan Playlist.
Konten dan contoh kode di halaman ini tunduk kepada lisensi yang dijelaskan dalam Lisensi Konten. Java dan OpenJDK adalah merek dagang atau merek dagang terdaftar dari Oracle dan/atau afiliasinya.
Terakhir diperbarui pada 2025-08-28 UTC.
[[["Mudah dipahami","easyToUnderstand","thumb-up"],["Memecahkan masalah saya","solvedMyProblem","thumb-up"],["Lainnya","otherUp","thumb-up"]],[["Informasi yang saya butuhkan tidak ada","missingTheInformationINeed","thumb-down"],["Terlalu rumit/langkahnya terlalu banyak","tooComplicatedTooManySteps","thumb-down"],["Sudah usang","outOfDate","thumb-down"],["Masalah terjemahan","translationIssue","thumb-down"],["Masalah kode / contoh","samplesCodeIssue","thumb-down"],["Lainnya","otherDown","thumb-down"]],["Terakhir diperbarui pada 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)"]]