Tetap teratur dengan koleksi
Simpan dan kategorikan konten berdasarkan preferensi Anda.
Tab memungkinkan Anda mengatur grup konten terkait. Ada dua jenis tab:
Tab utama: Ditempatkan di bagian atas panel konten di bawah panel aplikasi atas.
Tab ini menampilkan tujuan konten utama, dan harus digunakan jika hanya diperlukan satu set tab.
Tab sekunder: Digunakan dalam area konten untuk memisahkan lebih lanjut konten terkait dan membuat hierarki. Tab ini diperlukan jika layar memerlukan lebih dari satu tingkat tab.
Gambar 1. Tab utama (1) dan tab sekunder (2).
Halaman ini menunjukkan cara menampilkan tab utama di aplikasi Anda dengan layar terkait dan
navigasi dasar.
Platform API
Gunakan composable Tab, PrimaryTabRow, dan SecondaryTabRow
untuk menerapkan tab. Composable Tab merepresentasikan setiap tab dalam
baris, dan biasanya digunakan di dalam PrimaryTabRow (untuk tab indikator utama) atau SecondaryTabRow (untuk tab indikator sekunder).
Tab mencakup parameter utama berikut:
selected: Menentukan apakah tab saat ini ditandai secara visual.
onClick(): Fungsi lambda wajib yang menentukan tindakan yang akan
dilakukan saat pengguna mengklik tab. Di sinilah Anda biasanya menangani
peristiwa navigasi, memperbarui status tab yang dipilih, atau memuat
konten yang sesuai.
text: Menampilkan teks dalam tab. Opsional.
icon: Menampilkan ikon dalam tab. Opsional.
enabled: Mengontrol apakah tab diaktifkan dan dapat berinteraksi. Jika
disetel ke salah (false), tab akan muncul dalam keadaan dinonaktifkan dan tidak akan merespons
klik.
Contoh: Navigasi berbasis tab
Cuplikan berikut menerapkan panel navigasi atas dengan tab untuk menavigasi
antar-layar yang berbeda dalam aplikasi:
PrimaryTabRow menampilkan baris tab horizontal, dengan setiap tab 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
tab yang dipilih.
startDestination.ordinal mendapatkan indeks numerik (posisi) entri enum
Destination.SONGS.
Saat Anda mengklik tab, lambda onClick akan memanggil
navController.navigate(route = destination.route) untuk membuka
layar yang sesuai.
Lambda onClick dari Tab memperbarui status selectedDestination untuk menandai tab yang diklik secara visual.
Composable ini memanggil composable AppNavHost, meneruskan navController dan
startDestination, untuk menampilkan konten sebenarnya dari layar yang dipilih.
Hasil
Gambar berikut menunjukkan hasil cuplikan sebelumnya:
Gambar 2. 3 tab—Lagu, Album, dan Playlist—yang disusun secara horizontal.
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,["Tabs allow you to organize groups of related content. There are two types of\ntabs:\n\n- **Primary tabs**: Placed at the top of the content pane under a top app bar. They display the main content destinations, and should be used when just one set of tabs are needed.\n- **Secondary tabs**: Used within a content area to further separate related content and establish hierarchy. They are necessary when a screen requires more than one level of tabs.\n\n**Figure 1.** Primary tabs (1) and secondary tabs (2).\n\nThis page shows how to display primary tabs in your app with related screens and\nbasic navigation.\n\nAPI surface\n\nUse the [`Tab`](/reference/kotlin/androidx/compose/material3/package-summary#Tab(kotlin.Boolean,kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Boolean,kotlin.Function0,kotlin.Function0,androidx.compose.ui.graphics.Color,androidx.compose.ui.graphics.Color,androidx.compose.foundation.interaction.MutableInteractionSource)), [`PrimaryTabRow`](/reference/kotlin/androidx/compose/material3/package-summary#PrimaryTabRow(kotlin.Int,androidx.compose.ui.Modifier,androidx.compose.ui.graphics.Color,androidx.compose.ui.graphics.Color,kotlin.Function1,kotlin.Function0,kotlin.Function0)), and [`SecondaryTabRow`](/reference/kotlin/androidx/compose/material3/package-summary#SecondaryTabRow(kotlin.Int,androidx.compose.ui.Modifier,androidx.compose.ui.graphics.Color,androidx.compose.ui.graphics.Color,kotlin.Function1,kotlin.Function0,kotlin.Function0)) composables\nto implement tabs. The `Tab` composable represents an individual tab within the\nrow, and is typically used inside of a `PrimaryTabRow` (for primary indicator\ntabs) or `SecondaryTabRow` (for secondary indicator tabs).\n\n`Tab` includes the following key parameters:\n\n- `selected`: Determines whether the current tab is visually highlighted.\n- `onClick()`: A required lambda function that defines the action to be performed when the user clicks on the tab. This is where you typically handle navigation events, update the selected tab state, or load corresponding content.\n- `text`: Displays text within the tab. Optional.\n- `icon`: Displays an icon within the tab. Optional.\n- `enabled`: Controls whether the tab is enabled and can be interacted with. If set to false, the tab appears in a disabled state and won't respond to clicks.\n\nExample: Tab-based navigation\n\nThe following snippet implements a top navigation bar with tabs to navigate\nbetween 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 NavigationTabExample(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 PrimaryTabRow(selectedTabIndex = selectedDestination, modifier = Modifier.padding(contentPadding)) {\n Destination.entries.forEachIndexed { index, destination -\u003e\n Tab(\n selected = selectedDestination == index,\n onClick = {\n navController.navigate(route = destination.route)\n selectedDestination = index\n },\n text = {\n Text(\n text = destination.label,\n maxLines = 2,\n overflow = TextOverflow.Ellipsis\n )\n }\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#L186-L213\n```\n\n\u003cbr /\u003e\n\nKey points\n\n- `PrimaryTabRow` displays a horizontal row of tabs, with each tab 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 selected tab.\n - `startDestination.ordinal` gets the numerical index (position) of the `Destination.SONGS` enum entry.\n- When you click a tab, the `onClick` lambda calls `navController.navigate(route = destination.route)` to navigate to the corresponding screen.\n- The `onClick` lambda of the `Tab` updates the `selectedDestination` state to visually highlight the clicked tab.\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.** 3 tabs--- Songs, Album, and Playlist--- arranged horizontally.\n\nAdditional resources\n\n- [Material 3 - Tabs](https://m3.material.io/components/tabs/guidelines)\n- [Navigation with Compose](/develop/ui/compose/navigation)"]]