Dialog
bileşeni, ana uygulama içeriğinin üzerindeki bir katmanda pop-up mesajları görüntüler veya kullanıcı girişi ister. Kullanıcının dikkatini çekmek için
uygulamayı kesintiye uğratan bir kullanıcı arayüzü deneyimi oluşturur.
İletişim kutularının kullanım alanlarından bazıları şunlardır:
- Kullanıcının yaptığı işlemi onaylama (ör. dosya silme).
- Yapılacaklar listesi uygulamasında olduğu gibi kullanıcı girişi isteme.
- Profil ayarlarında ülke seçme gibi kullanıcı seçimi için seçeneklerin listesini sunar.
Uyarı iletişim kutusu
AlertDialog
composable, Materyal Tasarım temalı iletişim kutusu oluşturmak için kullanışlı bir API sunar. AlertDialog
, iletişim kutusunun belirli öğelerini işlemek için belirli parametrelere sahiptir. Bunlardan bazıları şunlardır:
title
: İletişim kutusunun üst kısmında görünen metin.text
: İletişim kutusunun ortasında görünen metin.icon
: İletişim kutusunun üst kısmında görünen grafik.onDismissRequest
: Kullanıcı, iletişim kutusunu kapattığında (ör. dışına dokunarak) çağrılan işlev.dismissButton
: Kapatma düğmesi olarak işlev gören bir composable.confirmButton
: Onay düğmesi görevi gören bir composable.
Aşağıdaki örnekte, bir uyarı iletişim kutusuna biri iletişim kutusunu kapatan, diğeriyse isteği onaylayan iki düğme uygulanmaktadır.
@OptIn(ExperimentalMaterial3Api::class) @Composable fun AlertDialogExample( onDismissRequest: () -> Unit, onConfirmation: () -> Unit, dialogTitle: String, dialogText: String, icon: ImageVector, ) { AlertDialog( icon = { Icon(icon, contentDescription = "Example Icon") }, title = { Text(text = dialogTitle) }, text = { Text(text = dialogText) }, onDismissRequest = { onDismissRequest() }, confirmButton = { TextButton( onClick = { onConfirmation() } ) { Text("Confirm") } }, dismissButton = { TextButton( onClick = { onDismissRequest() } ) { Text("Dismiss") } } ) }
Bu uygulama, alt composable'a şu şekilde bağımsız değişkenler geçiren bir üst composable anlamına gelir:
@Composable fun DialogExamples() { // ... val openAlertDialog = remember { mutableStateOf(false) } // ... when { // ... openAlertDialog.value -> { AlertDialogExample( onDismissRequest = { openAlertDialog.value = false }, onConfirmation = { openAlertDialog.value = false println("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 ) } } } }
Bu uygulama aşağıdaki gibi görünür:
composable iletişim kutusu
Dialog
, içerik için herhangi bir stil veya önceden tanımlanmış alan sağlamayan temel bir composable'dır. Card
gibi bir container ile doldurmanız gereken nispeten basit bir container'dır. İletişim kutusunun temel parametrelerinden bazıları aşağıda verilmiştir:
onDismissRequest
: Kullanıcı iletişim kutusunu kapattığında çağrılan lambda.properties
: Özelleştirme için ek kapsam sağlayanDialogProperties
örneği.
Temel örnek
Aşağıdaki örnek, Dialog
composable'ın temel uygulamasıdır. Bu API'nin ikincil kapsayıcı olarak bir Card
kullandığını unutmayın. Card
olmadığında Text
bileşeni, ana uygulama içeriğinin üzerinde tek başına görünür.
@Composable fun MinimalDialog(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, ) } } }
Bu uygulama aşağıdaki gibi görünür. İletişim kutusu açıldığında altındaki ana uygulama içeriğinin daha koyu ve gri göründüğünü unutmayın:
Gelişmiş örnek
Aşağıda, Dialog
composable'ın daha gelişmiş bir uygulaması bulunmaktadır. Bu durumda, bileşen yukarıdaki AlertDialog
örneğine benzer bir arayüzü manuel olarak uygular.
@Composable fun DialogWithImage( onDismissRequest: () -> Unit, onConfirmation: () -> Unit, painter: Painter, imageDescription: String, ) { Dialog(onDismissRequest = { onDismissRequest() }) { // Draw a rectangle shape with rounded corners inside the dialog Card( 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") } } } } } }
Bu uygulama aşağıdaki gibi görünür: