I selettori dell'ora consentono agli utenti di selezionare un orario. Puoi utilizzare gli elementi componibili TimePicker
e TimeInput
per implementare un selettore di data e ora nella tua app.
Tipi
Esistono due tipi di selettore dell'ora:
- Quadrante: consente agli utenti di impostare un'ora spostando una manopola su un quadrante.
- Immissione: consente agli utenti di impostare un'ora utilizzando la tastiera.
L'immagine seguente mostra un esempio di selettore dell'ora sul quadrante a sinistra e un selettore dell'ora di immissione a destra:
API surface
Per implementare un selettore di data e ora, utilizza l'elemento componibile TimePicker
o TimeInput
:
TimePicker
: implementa un selettore dell'ora di chiamata.TimeInput
: implementa un selettore dell'ora di input.
Stato
Sia per TimePicker
che per TimeInput
, devi anche passare un
TimePickerState
. In questo modo puoi impostare l'ora selezionata predefinita visualizzata nel selettore. Acquisisce anche l'ora selezionata dall'utente utilizzando il selettore.
Finestra di dialogo
I selettori dell'ora vengono visualizzati nelle finestre di dialogo. Gli esempi in questa guida non utilizzano le finestre di dialogo. Per esempi che utilizzano le finestre di dialogo, consulta la guida Finestre di dialogo per i selettori dell'ora.
Selettore ora di composizione
Questo snippet mostra come implementare un selettore dell'ora del quadrante di base.
@Composable fun DialExample( onConfirm: () -> Unit, onDismiss: () -> Unit, ) { val currentTime = Calendar.getInstance() val timePickerState = rememberTimePickerState( initialHour = currentTime.get(Calendar.HOUR_OF_DAY), initialMinute = currentTime.get(Calendar.MINUTE), is24Hour = true, ) Column { TimePicker( state = timePickerState, ) Button(onClick = onDismiss) { Text("Dismiss picker") } Button(onClick = onConfirm) { Text("Confirm selection") } } }
Considera quanto segue in questo snippet:
Calendar.getInstance()
inizializzaTimePickerState
con l'ora corrente.- In questo esempio viene utilizzato
java.util.Calendar
. Abilita la rimozione del codice non necessario dalle API Java 8 e versioni successive nel tuo progetto per utilizzare alternativamentejava.time.LocalTime
su tutte le versioni di Android.
- In questo esempio viene utilizzato
- Il componibile
TimePicker
mostra il selettore dell'ora e utilizzatimePickerState
come parametro. - L'implementazione include due pulsanti: uno per confermare la selezione e un altro per chiudere il selettore.
Questa implementazione è visualizzata come segue:
Inserisci selettore ora
Questo snippet mostra come implementare un selettore dell'ora di stile di immissione di base.
@Composable fun InputExample( onConfirm: () -> Unit, onDismiss: () -> Unit, ) { val currentTime = Calendar.getInstance() val timePickerState = rememberTimePickerState( initialHour = currentTime.get(Calendar.HOUR_OF_DAY), initialMinute = currentTime.get(Calendar.MINUTE), is24Hour = true, ) Column { TimeInput( state = timePickerState, ) Button(onClick = onDismiss) { Text("Dismiss picker") } Button(onClick = onConfirm) { Text("Confirm selection") } } }
Punti chiave da tenere in considerazione in questa implementazione:
- La struttura è sostanzialmente la stessa del selettore dell'ora, con la differenza principale
che è l'utilizzo di
TimeInput
anzichéTimePicker
. - Il parametro
is24Hour
pertimePickerState
è impostato esplicitamente sutrue
. Per impostazione predefinita, questo valore èfalse
.
Questa implementazione è visualizzata come segue:
Utilizzare lo stato
Per utilizzare l'ora selezionata dall'utente in un selettore dell'ora, passa il valore TimePickerState
appropriato alla funzione onConfirm
. L'elemento componibile padre potrà quindi accedere all'ora selezionata tramite TimePickerState.hour
e TimePickerState.minute
.
Il seguente snippet mostra come eseguire questa operazione:
@Composable fun DialUseStateExample( 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, ) Column { TimePicker( state = timePickerState, ) Button(onClick = onDismiss) { Text("Dismiss picker") } Button(onClick = { onConfirm(timePickerState) }) { Text("Confirm selection") } } }
Potresti quindi chiamare il composable come segue:
var selectedTime: TimePickerState? by remember { mutableStateOf(null) }
// ...
DialUseStateExample(
onDismiss = {
showDialExample = false
},
onConfirm = {
time ->
selectedTime = time
showDialExample = false
},
)
// ...
if (selectedTime != null) {
val cal = Calendar.getInstance()
cal.set(Calendar.HOUR_OF_DAY, selectedTime!!.hour)
cal.set(Calendar.MINUTE, selectedTime!!.minute)
cal.isLenient = false
Text("Selected time = ${formatter.format(cal.time)}")
} else {
Text("No time selected.")
}
Per maggiori dettagli, consulta l'implementazione completa nell'app snippet.