「時間挑選器」可讓使用者選取時間。你可以
使用 TimePicker
和 TimeInput
可組合函式來實作時間
應用程式中的挑選器。
類型
時間挑選器有兩種類型:
- 撥號:允許使用者在轉盤周圍移動控點來設定時間。
- 輸入:使用者可透過鍵盤設定時間。
下圖是左側的撥號時間挑選器範例,且 右側則是輸入時間挑選器:
![撥號和輸入時間挑選器。](https://developer.android.google.cn/static/develop/ui/compose/images/components/timepickers.png?hl=zh-tw)
API 介面
如要實作時間挑選器,請使用 TimePicker
或 TimeInput
可組合函式:
TimePicker
:實作撥號時間挑選器。TimeInput
:實作輸入時間挑選器。
狀態
對於 TimePicker
和 TimeInput
,您也需要傳遞
TimePickerState
。這樣就能設定預設顯示的時間
。也會擷取使用者使用
。
對話方塊
對話方塊會顯示時間挑選器。本指南中的範例不會使用對話方塊。 如需對話方塊的使用範例,請參閱「時間挑選器的對話方塊」指南。
撥號時間挑選器
以下程式碼片段示範如何實作基本撥號時間挑選器。
@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") } } }
請參考這個程式碼片段中的下列做法:
Calendar.getInstance()
會使用目前的TimePickerState
讓應用程式從可以最快做出回應的位置 回應使用者要求- 本範例使用
java.util.Calendar
。啟用 Java 在專案中對 API 進行 8 個以上的脫糖程序,改為使用 所有 Android 版本上的java.time.LocalTime
。
- 本範例使用
TimePicker
可組合函式會顯示時間挑選器,並timePickerState
做為參數。- 導入作業包含兩個按鈕:一個用於確認選擇, 以關閉挑選器
實作內容如下所示:
![撥號時間挑選器。使用者可以使用撥號功能選取時間。](https://developer.android.google.cn/static/develop/ui/compose/images/components/timepicker-dial.png?hl=zh-tw)
輸入時間挑選器
以下程式碼片段說明如何實作基本輸入樣式時間挑選器。
@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") } } }
這次實作方式的重點如下:
- 這個結構的結構基本上是撥號時間挑選器,而且
差異在於使用
TimeInput
,而非TimePicker
。 timePickerState
的is24Hour
參數已明確設為true
。 根據預設,這個值為false
。
實作內容如下所示:
![輸入時間挑選器。使用者可以在文字欄位輸入時間。](https://developer.android.google.cn/static/develop/ui/compose/images/components/timepicker-input.png?hl=zh-tw)
使用狀態
如要使用使用者在時間挑選器中選取的時間,請傳遞
適用於 onConfirm
函式的 TimePickerState
。父項
這樣一來,可組合函式即可透過 TimePickerState.hour
和
TimePickerState.minute
。
下列程式碼片段說明如何執行這項作業:
@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") } } }
接著,您可以按照以下方式呼叫可組合函式:
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.")
}
詳情請參閱程式碼片段中的完整導入說明 app。