I selettori dell'ora consentono agli utenti di selezionare un'ora. Puoi utilizzare i componibili TimePicker e TimeInput per implementare un selettore dell'ora nella tua app.
Tipi
Esistono due tipi di selettore dell'ora:
- Quadrante: consente agli utenti di impostare un'ora spostando un cursore intorno a un quadrante.
- Input: consente agli utenti di impostare un orario utilizzando la tastiera.
L'immagine seguente mostra un esempio di selettore dell'ora con quadrante a sinistra e un selettore dell'ora con input a destra:
Piattaforma API
Per implementare un selettore dell'ora, utilizza il componibile TimePicker o TimeInput:
TimePicker: implementa un selettore dell'ora con 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 che viene 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 ora con quadrante
Questo snippet mostra come implementare un selettore di ora 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()inizializzaTimePickerStatecon l'ora corrente.- Questo esempio utilizza
java.util.Calendar. Attiva il desugaring delle API Java 8 e versioni successive nel tuo progetto per utilizzare in alternativajava.time.LocalTimesu tutte le versioni di Android.
- Questo esempio utilizza
- Il componibile
TimePickervisualizza il selettore ora, utilizzandotimePickerStatecome parametro. - L'implementazione include due pulsanti: uno per confermare la selezione e un altro per chiudere il selettore.
Ecco come appare la barra:
Selettore ora di input
Questo snippet mostra come implementare un selettore di ora di base con stile di input.
@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 presente in questa implementazione:
- La struttura è essenzialmente la stessa del selettore dell'ora con quadrante, con la differenza principale che viene utilizzato
TimeInputanzichéTimePicker. - Il parametro
is24HourpertimePickerStateè impostato esplicitamente sutrue. Per impostazione predefinita, questo valore èfalse.
Ecco come appare la barra:
Utilizza 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 fare:
@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") } } }
Puoi quindi chiamare il composable in questo modo:
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 di snippet.