I selettori dell'ora consentono agli utenti di selezionare un'ora. Puoi
utilizzare i composabili TimePicker
e TimeInput
per implementare un selettore
delle ore nella tua app.
Tipi
Esistono due tipi di selettori 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 dell'ora, utilizza il composable TimePicker
o TimeInput
:
TimePicker
: implementa un selettore dell'ora del quadrante.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 finestre di dialogo. Per esempi che utilizzano le finestre di dialogo, consulta la guida Finestre di dialogo per i selettori dell'ora.
Selettore dell'ora sul quadrante
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.- Questo esempio utilizza
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.
- Questo esempio utilizza
- 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 è essenzialmente la stessa del selettore dell'ora del quadrante, 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
. Il composable principale può 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.