टाइम पिकर अक्सर डायलॉग में दिखते हैं. डायलॉग बॉक्स को सामान्य और कम से कम सुविधाओं के साथ लागू किया जा सकता है. इसके अलावा, ज़्यादा सुविधाओं के साथ कस्टम डायलॉग बॉक्स भी लागू किया जा सकता है.
डायलॉग के बारे में ज़्यादा जानकारी पाने के लिए, टाइम पिकर की गाइड देखें. इसमें टाइम पिकर की स्थिति को इस्तेमाल करने का तरीका भी बताया गया है.
बुनियादी उदाहरण
टाइम पिकर के लिए डायलॉग बनाने का सबसे आसान तरीका है कि आप ऐसा कॉम्पोज़ेबल बनाएं जो AlertDialog को लागू करे. यहां दिए गए स्निपेट में, इस तरीके का इस्तेमाल करके बनाए गए एक सामान्य डायलॉग बॉक्स का उदाहरण दिया गया है:
@Composable fun DialWithDialogExample( onConfirm: (TimePickerState) -> Unit, onDismiss: () -> Unit, ) { val currentTime = Calendar.getInstance() val timePickerState = rememberTimePickerState( initialHour = currentTime.get(Calendar.HOUR_OF_DAY), initialMinute = currentTime.get(Calendar.MINUTE), is24Hour = true, ) TimePickerDialog( onDismiss = { onDismiss() }, onConfirm = { onConfirm(timePickerState) } ) { TimePicker( state = timePickerState, ) } } @Composable fun TimePickerDialog( onDismiss: () -> Unit, onConfirm: () -> Unit, content: @Composable () -> Unit ) { AlertDialog( onDismissRequest = onDismiss, dismissButton = { TextButton(onClick = { onDismiss() }) { Text("Dismiss") } }, confirmButton = { TextButton(onClick = { onConfirm() }) { Text("OK") } }, text = { content() } ) }
इस स्निपेट में मौजूद मुख्य बातों पर ध्यान दें:
DialWithDialogExampleकंपोज़ेबल,TimePickerको डायलॉग में रैप करता है.TimePickerDialogएक कस्टम कंपोज़ेबल है, जो इन पैरामीटर के साथAlertDialogबनाता है:onDismiss: यह फ़ंक्शन तब कॉल किया जाता है, जब उपयोगकर्ता डायलॉग को खारिज करता है. इसके लिए, खारिज करने वाले बटन या 'वापस जाएं' बटन का इस्तेमाल किया जाता है.onConfirm: जब उपयोगकर्ता "ठीक है" बटन पर क्लिक करता है, तब कॉल किया जाने वाला फ़ंक्शन.content: एक ऐसा कॉम्पोज़ेबल जो डायलॉग बॉक्स में टाइम पिकर दिखाता है.
AlertDialogमें ये शामिल हैं:- "खारिज करें" लेबल वाला खारिज करने का बटन.
- "ठीक है" लेबल वाला पुष्टि करने का बटन.
- टाइम पिकर का कॉन्टेंट,
textपैरामीटर के तौर पर पास किया गया.
DialWithDialogExample,TimePickerStateको मौजूदा समय के साथ शुरू करता है. साथ ही, इसेTimePickerऔरonConfirm, दोनों फ़ंक्शन को पास करता है.
बेहतर उदाहरण
इस स्निपेट में, Jetpack Compose में पसंद के मुताबिक बनाए जा सकने वाले टाइम पिकर डायलॉग को बेहतर तरीके से लागू करने का तरीका बताया गया है.
@Composable fun AdvancedTimePickerExample( onConfirm: (TimePickerState) -> Unit, onDismiss: () -> Unit, ) { val currentTime = Calendar.getInstance() val timePickerState = rememberTimePickerState( initialHour = currentTime.get(Calendar.HOUR_OF_DAY), initialMinute = currentTime.get(Calendar.MINUTE), is24Hour = true, ) /** Determines whether the time picker is dial or input */ var showDial by remember { mutableStateOf(true) } /** The icon used for the icon button that switches from dial to input */ val toggleIcon = if (showDial) { Icons.Filled.EditCalendar } else { Icons.Filled.AccessTime } AdvancedTimePickerDialog( onDismiss = { onDismiss() }, onConfirm = { onConfirm(timePickerState) }, toggle = { IconButton(onClick = { showDial = !showDial }) { Icon( imageVector = toggleIcon, contentDescription = "Time picker type toggle", ) } }, ) { if (showDial) { TimePicker( state = timePickerState, ) } else { TimeInput( state = timePickerState, ) } } } @Composable fun AdvancedTimePickerDialog( title: String = "Select Time", onDismiss: () -> Unit, onConfirm: () -> Unit, toggle: @Composable () -> Unit = {}, content: @Composable () -> Unit, ) { Dialog( onDismissRequest = onDismiss, properties = DialogProperties(usePlatformDefaultWidth = false), ) { Surface( shape = MaterialTheme.shapes.extraLarge, tonalElevation = 6.dp, modifier = Modifier .width(IntrinsicSize.Min) .height(IntrinsicSize.Min) .background( shape = MaterialTheme.shapes.extraLarge, color = MaterialTheme.colorScheme.surface ), ) { Column( modifier = Modifier.padding(24.dp), horizontalAlignment = Alignment.CenterHorizontally ) { Text( modifier = Modifier .fillMaxWidth() .padding(bottom = 20.dp), text = title, style = MaterialTheme.typography.labelMedium ) content() Row( modifier = Modifier .height(40.dp) .fillMaxWidth() ) { toggle() Spacer(modifier = Modifier.weight(1f)) TextButton(onClick = onDismiss) { Text("Cancel") } TextButton(onClick = onConfirm) { Text("OK") } } } } } }
इस स्निपेट में मौजूद मुख्य बातों पर ध्यान दें:
AdvancedTimePickerExampleकंपोज़ेबल, पसंद के मुताबिक बनाया जा सकने वाला टाइम पिकर डायलॉग बनाता है.- यह
AlertDialogके मुकाबले ज़्यादा फ़्लेक्सिबिलिटी के लिए,Dialogकंपोज़ेबल का इस्तेमाल करता है. - डायलॉग में, पसंद के मुताबिक बनाया जा सकने वाला टाइटल और डायल और इनपुट मोड के बीच स्विच करने के लिए एक टॉगल बटन शामिल होता है.
Surface, डायलॉग पर शेप और एलिवेशन लागू करता है. साथ ही, चौड़ाई और ऊंचाई, दोनों के लिएIntrinsicSize.Minका इस्तेमाल करता है.ColumnऔरRowलेआउट, डायलॉग के स्ट्रक्चर कॉम्पोनेंट उपलब्ध कराते हैं.- इस उदाहरण में,
showDialका इस्तेमाल करके पिकर मोड को ट्रैक किया गया है.IconButtonसे मोड के बीच टॉगल किया जा सकता है. इससे आइकॉन भी अपडेट हो जाता है.showDialकी स्थिति के आधार पर, डायलॉग बॉक्स का कॉन्टेंटTimePickerऔरTimeInputके बीच स्विच होता है.
इस ऐडवांस तरीके से, समय चुनने वाला ऐसा डायलॉग बॉक्स मिलता है जिसे ज़रूरत के हिसाब से आसानी से कस्टमाइज़ किया जा सकता है और बार-बार इस्तेमाल किया जा सकता है. इसे आपके ऐप्लिकेशन में अलग-अलग कामों के लिए इस्तेमाल किया जा सकता है.
लागू होने पर यह इस तरह दिखता है: