Dialog
कॉम्पोनेंट, पॉप-अप मैसेज दिखाता है या किसी
लेयर होती है. यह रुकावट पैदा करने वाला यूज़र इंटरफ़ेस (यूआई) अनुभव देता है,
उपयोगकर्ताओं का ध्यान खींचें.
डायलॉग के इस्तेमाल के उदाहरणों में ये शामिल हैं:
- उपयोगकर्ता की कार्रवाई की पुष्टि करना. जैसे, फ़ाइल मिटाते समय.
- उपयोगकर्ता के इनपुट का अनुरोध करना, जैसे कि काम की सूची वाले ऐप्लिकेशन में.
- उपयोगकर्ता को विकल्पों की सूची दिखाना, जैसे कि प्रोफ़ाइल सेटअप करने के दौरान कोई देश चुनना.
अलर्ट संवाद
AlertDialog
कॉम्पोज़ेबल, मटीरियल डिज़ाइन थीम वाला डायलॉग बनाने के लिए एक आसान एपीआई उपलब्ध कराता है. AlertDialog
में डायलॉग के खास एलिमेंट को मैनेज करने के लिए, खास पैरामीटर होते हैं. इनमें ये शामिल हैं:
title
: डायलॉग बॉक्स में सबसे ऊपर दिखने वाला टेक्स्ट.text
: डायलॉग बॉक्स के बीच में दिखने वाला टेक्स्ट.icon
: डायलॉग बॉक्स में सबसे ऊपर दिखने वाला ग्राफ़िक.onDismissRequest
: यह फ़ंक्शन तब कॉल किया जाता है, जब उपयोगकर्ता डायलॉग को खारिज करता है. उदाहरण के लिए, डायलॉग बॉक्स के बाहर टैप करके.dismissButton
: एक ऐसा कॉम्पोज़ेबल जो 'खारिज करें' बटन के तौर पर काम करता है.confirmButton
: एक कंपोज़ेबल जो पुष्टि करने वाले बटन के तौर पर काम करता है.
नीचे दिए गए उदाहरण में, सूचना वाले डायलॉग में दो बटन लागू किए गए हैं. पहला बटन, डायलॉग को खारिज करता है और दूसरा बटन, अनुरोध की पुष्टि करता है.
@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") } } ) }
इस तरीके से लागू करने का मतलब है कि पैरंट कॉम्पोनेंट, चाइल्ड कॉम्पोनेंट को इस तरह आर्ग्युमेंट भेजता है:
@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 ) } } } }
लागू होने पर यह ऐसा दिखता है:
डायलॉग कॉम्पोज़ेबल
Dialog
एक बेसिक कंपोज़ेबल है, जो कोई स्टाइलिंग उपलब्ध नहीं कराता या
जो कॉन्टेंट के लिए पहले से तय स्लॉट हैं. यह एक छोटा कंटेनर है, जो
तो आपको Card
जैसे कंटेनर के ज़रिए अपने-आप जानकारी भरनी चाहिए. यहां डायलॉग के कुछ मुख्य पैरामीटर दिए गए हैं:
onDismissRequest
: डायलॉग बॉक्स को बंद करने पर, Lambda फ़ंक्शन को कॉल किया जाता है.properties
:DialogProperties
का एक उदाहरण, जो पसंद के मुताबिक बनाने के लिए कुछ और स्कोप देता है.
बुनियादी उदाहरण
यहां दिए गए उदाहरण में, Dialog
कॉम्पोज़ेबल को बुनियादी तौर पर लागू करने का तरीका बताया गया है. नोट जोड़ें
कि यह Card
का इस्तेमाल सेकंडरी कंटेनर के तौर पर करता है. Card
के बिना, Text
कॉम्पोनेंट, ऐप्लिकेशन के मुख्य कॉन्टेंट के ऊपर अकेला दिखेगा.
@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, ) } } }
लागू होने की यह प्रक्रिया इस तरह दिखती है. ध्यान दें कि डायलॉग बॉक्स खुला होने पर, उसके नीचे मौजूद ऐप्लिकेशन का मुख्य कॉन्टेंट, धुंधला और स्लेटी रंग में दिखता है:
बेहतर उदाहरण
Dialog
कंपोज़ेबल का बेहतर तरीके से लागू किया गया वर्शन यहां दिया गया है. इस मामले में, कॉम्पोनेंट ऊपर दिए गए AlertDialog
उदाहरण के जैसा इंटरफ़ेस मैन्युअल तरीके से लागू करता है.
@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") } } } } } }
लागू होने पर यह ऐसा दिखता है: