Tetap teratur dengan koleksi
Simpan dan kategorikan konten berdasarkan preferensi Anda.
Komponen Dialog menampilkan pesan dialog atau meminta input pengguna pada
lapisan di atas konten aplikasi utama. Hal ini menciptakan pengalaman UI yang mengganggu untuk menarik perhatian pengguna.
Kasus penggunaan untuk dialog antara lain sebagai berikut:
Mengonfirmasi tindakan pengguna, seperti saat menghapus file.
Meminta input pengguna, seperti di aplikasi daftar tugas.
Menampilkan daftar opsi untuk dipilih pengguna, seperti memilih negara dalam penyiapan profil.
Gambar 1. Contoh dialog yang diisi dengan teks dan ikon.
Dialog notifikasi
Composable AlertDialog menyediakan API yang mudah digunakan untuk membuat dialog bertema Desain Material. AlertDialog memiliki parameter khusus untuk
menangani elemen tertentu dalam dialog. Di antaranya adalah sebagai berikut:
title: Teks yang muncul di bagian atas dialog.
text: Teks yang muncul di tengah dialog.
icon: Grafik yang muncul di bagian atas dialog.
onDismissRequest: Fungsi yang dipanggil saat pengguna menutup dialog, misalnya dengan mengetuk di luar dialog.
dismissButton: Composable yang berfungsi sebagai tombol tutup.
confirmButton: Composable yang berfungsi sebagai tombol konfirmasi.
Contoh berikut menerapkan dua tombol dalam dialog pemberitahuan, satu tombol yang menutup dialog, dan tombol lainnya yang mengonfirmasi permintaannya.
Implementasi ini menyiratkan composable induk yang meneruskan argumen ke
composable turunan dengan cara ini:
@ComposablefunDialogExamples(){// ...valopenAlertDialog=remember{mutableStateOf(false)}// ...when{// ...openAlertDialog.value->{AlertDialogExample(onDismissRequest={openAlertDialog.value=false},onConfirmation={openAlertDialog.value=falseprintln("Confirmation registered")// Add logic here to handle confirmation.},dialogTitle="Alert dialog example",dialogText="This is an example of an alert dialog with buttons.",icon=Icons.Default.Info)}}}}
Dialog adalah composable dasar yang tidak menyediakan gaya atau slot yang telah ditentukan sebelumnya untuk konten. Ini adalah container yang relatif mudah yang harus Anda isi dengan container seperti Card. Berikut adalah beberapa parameter utama dialog:
onDismissRequest: Lambda yang dipanggil saat pengguna menutup dialog.
properties: Instance DialogProperties yang menyediakan beberapa
cakupan tambahan untuk penyesuaian.
Contoh dasar
Contoh berikut adalah implementasi dasar composable Dialog. Perhatikan
bahwa fungsi ini menggunakan Card sebagai penampung sekunder. Tanpa Card, komponen Text
akan muncul sendiri di atas konten aplikasi utama.
@ComposablefunMinimalDialog(onDismissRequest:()->Unit){Dialog(onDismissRequest={onDismissRequest()}){Card(modifier=Modifier.fillMaxWidth().height(200.dp).padding(16.dp),shape=RoundedCornerShape(16.dp),){Text(text="This is a minimal dialog",modifier=Modifier.fillMaxSize().wrapContentSize(Alignment.Center),textAlign=TextAlign.Center,)}}}
Penerapan ini akan terlihat seperti berikut. Perhatikan bahwa saat dialog terbuka, konten aplikasi utama di bawahnya tampak lebih gelap dan berwarna abu-abu:
Gambar 3. Dialog minimal.
Contoh lanjutan
Berikut adalah penerapan composable Dialog yang lebih canggih. Dalam
kasus ini, komponen mengimplementasikan antarmuka yang serupa dengan contoh AlertDialog
di atas secara manual.
@ComposablefunDialogWithImage(onDismissRequest:()->Unit,onConfirmation:()->Unit,painter:Painter,imageDescription:String,){Dialog(onDismissRequest={onDismissRequest()}){// Draw a rectangle shape with rounded corners inside the dialogCard(modifier=Modifier.fillMaxWidth().height(375.dp).padding(16.dp),shape=RoundedCornerShape(16.dp),){Column(modifier=Modifier.fillMaxSize(),verticalArrangement=Arrangement.Center,horizontalAlignment=Alignment.CenterHorizontally,){Image(painter=painter,contentDescription=imageDescription,contentScale=ContentScale.Fit,modifier=Modifier.height(160.dp))Text(text="This is a dialog with buttons and an image.",modifier=Modifier.padding(16.dp),)Row(modifier=Modifier.fillMaxWidth(),horizontalArrangement=Arrangement.Center,){TextButton(onClick={onDismissRequest()},modifier=Modifier.padding(8.dp),){Text("Dismiss")}TextButton(onClick={onConfirmation()},modifier=Modifier.padding(8.dp),){Text("Confirm")}}}}}}
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 [`Dialog`](/reference/kotlin/androidx/compose/ui/window/package-summary#Dialog(kotlin.Function0,androidx.compose.ui.window.DialogProperties,kotlin.Function0)) component displays dialog messages or requests user input on a\nlayer above the main app content. It creates an interruptive UI experience to\ncapture user attention.\n\nAmong the use cases for a dialog are the following:\n\n- Confirming user action, such as when deleting a file.\n- Requesting user input, such as in a to-do list app.\n- Presenting a list of options for user selection, like choosing a country in a profile setup.\n\n**Figure 1.** An example of a dialog populated with text and icons.\n\nAlert dialog\n\nThe [`AlertDialog`](/reference/kotlin/androidx/compose/material3/package-summary#AlertDialog(kotlin.Function0,kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Function0,kotlin.Function0,kotlin.Function0,kotlin.Function0,androidx.compose.ui.graphics.Shape,androidx.compose.ui.graphics.Color,androidx.compose.ui.graphics.Color,androidx.compose.ui.graphics.Color,androidx.compose.ui.graphics.Color,androidx.compose.ui.unit.Dp,androidx.compose.ui.window.DialogProperties)) composable provides a convenient API for creating a\nMaterial Design themed dialog. `AlertDialog` has specific parameters for\nhandling particular elements of the dialog. Among them are the following:\n\n- `title`: The text that appears along the top of the dialog.\n- `text`: The text that appears centered within the dialog.\n- `icon`: The graphic that appears at the top of the dialog.\n- `onDismissRequest`: The function called when the user dismisses the dialog, such as by tapping outside of it.\n- `dismissButton`: A composable that serves as the dismiss button.\n- `confirmButton`: A composable that serves as the confirm button.\n\nThe following example implements two buttons in an alert dialog, one that\ndismisses the dialog, and another that confirms its request.\n\n\n```kotlin\n@Composable\nfun AlertDialogExample(\n onDismissRequest: () -\u003e Unit,\n onConfirmation: () -\u003e Unit,\n dialogTitle: String,\n dialogText: String,\n icon: ImageVector,\n) {\n AlertDialog(\n icon = {\n Icon(icon, contentDescription = \"Example Icon\")\n },\n title = {\n Text(text = dialogTitle)\n },\n text = {\n Text(text = dialogText)\n },\n onDismissRequest = {\n onDismissRequest()\n },\n confirmButton = {\n TextButton(\n onClick = {\n onConfirmation()\n }\n ) {\n Text(\"Confirm\")\n }\n },\n dismissButton = {\n TextButton(\n onClick = {\n onDismissRequest()\n }\n ) {\n Text(\"Dismiss\")\n }\n }\n )\n}https://github.com/android/snippets/blob/7a0ebbee11495f628cf9d574f6b6069c2867232a/compose/snippets/src/main/java/com/example/compose/snippets/components/Dialog.kt#L222-L262\n```\n\n\u003cbr /\u003e\n\nThis implementation implies a parent composable that passes arguments to the\nchild composable in this way:\n\n\n```kotlin\n@Composable\nfun DialogExamples() {\n // ...\n val openAlertDialog = remember { mutableStateOf(false) }\n\n // ...\n when {\n // ...\n openAlertDialog.value -\u003e {\n AlertDialogExample(\n onDismissRequest = { openAlertDialog.value = false },\n onConfirmation = {\n openAlertDialog.value = false\n println(\"Confirmation registered\") // Add logic here to handle confirmation.\n },\n dialogTitle = \"Alert dialog example\",\n dialogText = \"This is an example of an alert dialog with buttons.\",\n icon = Icons.Default.Info\n )\n }\n }\n }\n}https://github.com/android/snippets/blob/7a0ebbee11495f628cf9d574f6b6069c2867232a/compose/snippets/src/main/java/com/example/compose/snippets/components/Dialog.kt#L59-L137\n```\n\n\u003cbr /\u003e\n\nThis implementation appears as follows:\n**Figure 2.** An alert dialog with buttons. **Note:** When the user clicks either of the buttons, the dialog closes. When the user clicks confirm, it calls a function that also handles the confirmation. In this example, those functions are `onDismissRequest()` and `onConfirmRequest()`.\n| **Note:** In cases where your dialog requires a more complex set of buttons, you may benefit from using the `Dialog` composable and populating it in a more freeform manner.\n\nDialog composable\n\n[`Dialog`](/reference/kotlin/androidx/compose/ui/window/package-summary#Dialog(kotlin.Function0,androidx.compose.ui.window.DialogProperties,kotlin.Function0)) is a basic composable that doesn't provide any styling or\npredefined slots for content. It is a relatively straightforward container that\nyou should populate with a container such as `Card`. The following are some of\nthe key parameters of a dialog:\n\n- **`onDismissRequest`**: The lambda called when the user closes the dialog.\n- **`properties`** : An instance of [`DialogProperties`](/reference/kotlin/androidx/compose/ui/window/DialogProperties) that provides some additional scope for customization.\n\n| **Caution:** Unlike the example of `AlertDialog` in the preceding section, you need to manually specify the size and shape of `Dialog`. You also need to provide an inner container.\n\nBasic example\n\nThe following example is a basic implementation of the `Dialog` composable. Note\nthat it uses a `Card` as the secondary container. Without the `Card`, the `Text`\ncomponent would appear alone above the main app content.\n\n\n```kotlin\n@Composable\nfun MinimalDialog(onDismissRequest: () -\u003e Unit) {\n Dialog(onDismissRequest = { onDismissRequest() }) {\n Card(\n modifier = Modifier\n .fillMaxWidth()\n .height(200.dp)\n .padding(16.dp),\n shape = RoundedCornerShape(16.dp),\n ) {\n Text(\n text = \"This is a minimal dialog\",\n modifier = Modifier\n .fillMaxSize()\n .wrapContentSize(Alignment.Center),\n textAlign = TextAlign.Center,\n )\n }\n }\n}https://github.com/android/snippets/blob/7a0ebbee11495f628cf9d574f6b6069c2867232a/compose/snippets/src/main/java/com/example/compose/snippets/components/Dialog.kt#L141-L160\n```\n\n\u003cbr /\u003e\n\nThis implementation appears as follows. Note that when the dialog is open, the\nmain app content beneath it appears darkened and grayed out:\n**Figure 3.** Minimal dialog.\n\nAdvanced example\n\nThe following is a more advanced implemented of the `Dialog` composable. In this\ncase, the component manually implements a similar interface to the `AlertDialog`\nexample above.\n| **Caution:** If you only need to display a two-button dialog as in this example, you should use `AlertDialog` and its more convenient API. However, if you want to create a more complex dialog, perhaps with forms and multiple buttons, you should use `Dialog` with custom content, as in the following example.\n\n\n```kotlin\n@Composable\nfun DialogWithImage(\n onDismissRequest: () -\u003e Unit,\n onConfirmation: () -\u003e Unit,\n painter: Painter,\n imageDescription: String,\n) {\n Dialog(onDismissRequest = { onDismissRequest() }) {\n // Draw a rectangle shape with rounded corners inside the dialog\n Card(\n modifier = Modifier\n .fillMaxWidth()\n .height(375.dp)\n .padding(16.dp),\n shape = RoundedCornerShape(16.dp),\n ) {\n Column(\n modifier = Modifier\n .fillMaxSize(),\n verticalArrangement = Arrangement.Center,\n horizontalAlignment = Alignment.CenterHorizontally,\n ) {\n Image(\n painter = painter,\n contentDescription = imageDescription,\n contentScale = ContentScale.Fit,\n modifier = Modifier\n .height(160.dp)\n )\n Text(\n text = \"This is a dialog with buttons and an image.\",\n modifier = Modifier.padding(16.dp),\n )\n Row(\n modifier = Modifier\n .fillMaxWidth(),\n horizontalArrangement = Arrangement.Center,\n ) {\n TextButton(\n onClick = { onDismissRequest() },\n modifier = Modifier.padding(8.dp),\n ) {\n Text(\"Dismiss\")\n }\n TextButton(\n onClick = { onConfirmation() },\n modifier = Modifier.padding(8.dp),\n ) {\n Text(\"Confirm\")\n }\n }\n }\n }\n }\n}https://github.com/android/snippets/blob/7a0ebbee11495f628cf9d574f6b6069c2867232a/compose/snippets/src/main/java/com/example/compose/snippets/components/Dialog.kt#L164-L218\n```\n\n\u003cbr /\u003e\n\nThis implementation appears as follows:\n**Figure 4.** A dialog that includes an image.\n\nAdditional resources\n\n- [Material UI docs](https://m3.material.io/components/dialogs/overview)"]]