Saat seçicileri genellikle iletişim kutularında görünür. Göreceli olarak genel ve minimum bir iletişim kutusu uygulaması kullanabilir veya daha fazla esneklik sunan özel bir iletişim kutusu uygulayabilirsiniz.
Saat seçici durumunun nasıl kullanılacağı da dahil olmak üzere genel olarak iletişim kutuları hakkında daha fazla bilgi için Saat seçici kılavuzu başlıklı makaleyi inceleyin.
Temel örnek
Zaman seçiciniz için iletişim kutusu oluşturmanın en kolay yolu, AlertDialog
'yi uygulayan bir kompozisyon oluşturmaktır. Aşağıdaki snippet'te, bu yaklaşımın kullanıldığı nispeten minimal bir iletişim kutusu örneği verilmiştir:
@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() } ) }
Bu snippet'teki önemli noktaları not edin:
DialWithDialogExample
bileşeni,TimePicker
öğesini bir iletişim kutusuna sarar.TimePickerDialog
, aşağıdaki parametrelerle birAlertDialog
oluşturan özel bir derleyicidir:onDismiss
: Kullanıcı iletişim kutusunu kapattığında (kapatma düğmesi veya geri düğmesi aracılığıyla) çağrılan bir işlevdir.onConfirm
: Kullanıcı "Tamam" düğmesini tıkladığında çağrılan bir işlevdir.content
: İletişim kutusunda saat seçiciyi gösteren bir kompozisyon.
AlertDialog
şunları içerir:- "Kapat" etiketli bir kapat düğmesi.
- "Tamam" etiketli bir onay düğmesi.
text
parametresi olarak iletilen zaman seçici içeriği.
DialWithDialogExample
,TimePickerState
işlevini geçerli saatle başlatır ve hemTimePicker
hem deonConfirm
işlevine iletir.
Gelişmiş Örnek
Bu snippet'te, Jetpack Compose'da özelleştirilebilir bir zaman seçici iletişim kutusunun gelişmiş bir uygulaması gösterilmektedir.
@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") } } } } } }
Bu snippet'teki önemli noktaları not edin:
AdvancedTimePickerExample
bileşeni, özelleştirilebilir bir zaman seçici iletişim kutusu oluşturur.AlertDialog
'a kıyasla daha fazla esneklik içinDialog
bileşeni kullanır.- İletişim kutusunda, özelleştirilebilir bir başlık ve kadran ile giriş modları arasında geçiş yapmak için bir açma/kapatma düğmesi bulunur.
Surface
, hem genişlik hem de yükseklik içinIntrinsicSize.Min
ile iletişim kutusuna şekil ve yükseklik uygular.Column
veRow
düzeni, iletişim kutusunun yapı bileşenlerini sağlar.- Örnekte,
showDial
kullanılarak seçici modu izlenmektedir.IconButton
, modlar arasında geçiş yapar ve simgeyi buna göre günceller.- İletişim içeriği,
showDial
durumuna bağlı olarakTimePicker
veTimeInput
arasında geçiş yapar.
Bu gelişmiş uygulama, uygulamanızdaki farklı kullanım alanlarına uyum sağlayabilen, son derece özelleştirilebilir ve yeniden kullanılabilir bir zaman seçici iletişim kutusu sağlar.
Bu uygulama aşağıdaki gibi görünür: