Uhrzeitauswahlen werden häufig in Dialogfeldern angezeigt. Sie können eine relativ generische und minimale Implementierung eines Dialogfelds verwenden oder ein benutzerdefiniertes Dialogfeld mit mehr Flexibilität implementieren.
Weitere Informationen zu Dialogfeldern im Allgemeinen und zur Verwendung des Status der Uhrzeitauswahl finden Sie im Leitfaden zu Uhrzeitauswahlen.
Einfaches Beispiel
Die einfachste Möglichkeit, ein Dialogfeld für die Uhrzeitauswahl zu erstellen, besteht darin,
eine zusammensetzbare Funktion zu erstellen, die AlertDialog implementiert. Das folgende Snippet enthält ein Beispiel für ein relativ minimales Dialogfeld mit diesem Ansatz:
@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() } ) }
Beachten Sie die wichtigsten Punkte in diesem Snippet:
- Die zusammensetzbare Funktion
DialWithDialogExampleumschließtTimePickerin einem Dialogfeld. TimePickerDialogist eine benutzerdefinierte zusammensetzbare Funktion, die einAlertDialogmit den folgenden Parametern erstellt:onDismiss: Eine Funktion, die aufgerufen wird, wenn der Nutzer das Dialogfeld schließt (über die Schaltfläche zum Schließen oder durch Zurückgehen).onConfirm: Eine Funktion, die aufgerufen wird, wenn der Nutzer auf die Schaltfläche „OK“ klickt.content: Eine zusammensetzbare Funktion, die die Uhrzeitauswahl im Dialogfeld anzeigt.
- Das
AlertDialogenthält:- Eine Schaltfläche zum Schließen mit der Beschriftung „Schließen“.
- Eine Schaltfläche zum Bestätigen mit der Beschriftung „OK“.
- Den Inhalt der Uhrzeitauswahl, der als Parameter
textübergeben wird.
- Die Funktion
DialWithDialogExampleinitialisiertTimePickerStatemit der aktuellen Uhrzeit und übergibt sie sowohl anTimePickerals auch an die FunktiononConfirm.
Erweitertes Beispiel
Dieses Snippet zeigt eine erweiterte Implementierung eines anpassbaren Dialogfelds für die Uhrzeitauswahl in 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") } } } } } }
Beachten Sie die wichtigsten Punkte in diesem Snippet:
- Die zusammensetzbare Funktion
AdvancedTimePickerExampleerstellt ein anpassbares Dialogfeld für die Uhrzeitauswahl. - Sie verwendet eine
Dialogzusammensetzbare Funktion, um mehr Flexibilität alsAlertDialogzu bieten. - Das Dialogfeld enthält einen anpassbaren Titel und eine Schaltfläche zum Umschalten zwischen der Auswahl über ein Zifferblatt und der Eingabe.
Surfacewendet Form und Erhebung auf das Dialogfeld an, wobeiIntrinsicSize.Minsowohl für die Breite als auch für die Höhe verwendet wird.- Die Layouts
ColumnundRowstellen die Strukturkomponenten des Dialogfelds bereit. - Im Beispiel wird der Modus der Uhrzeitauswahl mit
showDialverfolgt.- Mit einer
IconButtonwird zwischen den Modi umgeschaltet und das Symbol entsprechend aktualisiert. - Der Dialogfeldinhalt wechselt zwischen
TimePickerundTimeInput, je nach Status vonshowDial.
- Mit einer
Diese erweiterte Implementierung bietet ein hochgradig anpassbares und wiederverwendbares Dialogfeld für die Uhrzeitauswahl, das an verschiedene Anwendungsfälle in Ihrer App angepasst werden kann.
Diese Implementierung sieht so aus: