เครื่องมือเลือกเวลาเป็นตัวเลือกให้ผู้ใช้เลือกเวลา คุณใช้คอมโพสิชัน TimePicker
และ TimeInput
เพื่อติดตั้งใช้งานเครื่องมือเลือกเวลาในแอปได้
ประเภท
เครื่องมือเลือกเวลามี 2 ประเภท ได้แก่
- หน้าปัด: อนุญาตให้ผู้ใช้ตั้งเวลาโดยการเลื่อนแถบรอบหน้าปัด
- การป้อนข้อมูล: อนุญาตให้ผู้ใช้ตั้งเวลาโดยใช้แป้นพิมพ์
รูปภาพต่อไปนี้แสดงตัวอย่างเครื่องมือเลือกเวลาแบบหน้าปัดทางด้านซ้าย และเครื่องมือเลือกเวลาแบบป้อนข้อมูลทางด้านขวา
แพลตฟอร์ม API
หากต้องการใช้เครื่องมือเลือกเวลา ให้ใช้คอมโพสิเบิล TimePicker
หรือ TimeInput
ดังนี้
TimePicker
: ใช้เครื่องมือเลือกเวลาแบบหน้าปัดTimeInput
: ใช้เครื่องมือเลือกเวลาป้อนข้อมูล
รัฐ
สําหรับทั้ง TimePicker
และ TimeInput
คุณต้องส่ง TimePickerState
ด้วย ซึ่งช่วยให้คุณตั้งค่าเวลาเริ่มต้นที่เลือกไว้ซึ่งจะปรากฏในเครื่องมือเลือก รวมถึงบันทึกเวลาที่ผู้ใช้เลือกโดยใช้เครื่องมือเลือก
Dialog
เครื่องมือเลือกเวลาจะปรากฏในกล่องโต้ตอบ ตัวอย่างในคู่มือนี้ไม่ได้ใช้กล่องโต้ตอบ ดูตัวอย่างที่ใช้กล่องโต้ตอบได้ที่คู่มือกล่องโต้ตอบสำหรับเครื่องมือเลือกเวลา
เครื่องมือเลือกเวลาแบบหน้าปัด
ข้อมูลโค้ดนี้สาธิตวิธีใช้เครื่องมือเลือกเวลาแบบหน้าปัดพื้นฐาน
@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 8+ API ให้เป็นรูปแบบทั่วไปในโปรเจ็กต์เพื่อใช้java.time.LocalTime
แทนใน Android ทุกเวอร์ชัน
- ตัวอย่างนี้ใช้
- Composable
TimePicker
จะแสดงเครื่องมือเลือกเวลาโดยรับtimePickerState
เป็นพารามิเตอร์ - การใช้งานจะมีปุ่ม 2 ปุ่ม ได้แก่ ปุ่มหนึ่งสำหรับยืนยันการเลือก และอีกปุ่มหนึ่งสำหรับปิดเครื่องมือเลือก
การติดตั้งใช้งานนี้จะปรากฏดังนี้
เครื่องมือเลือกเวลาของอินพุต
ข้อมูลโค้ดนี้สาธิตวิธีใช้เครื่องมือเลือกเวลาแบบป้อนข้อมูลพื้นฐาน
@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
- พารามิเตอร์
is24Hour
สำหรับtimePickerState
ได้รับการตั้งค่าเป็นtrue
อย่างชัดเจน โดยค่าเริ่มต้น ค่านี้คือfalse
การติดตั้งใช้งานนี้จะปรากฏดังนี้
ใช้สถานะ
หากต้องการใช้เวลาที่ผู้ใช้เลือกในเครื่องมือเลือกเวลา ให้ส่ง TimePickerState
ที่เหมาะสมไปยังฟังก์ชัน onConfirm
จากนั้นคอมโพสิชันหลักจะเข้าถึงเวลาที่เลือกผ่าน 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.")
}
ดูรายละเอียดเพิ่มเติมได้ที่การติดตั้งใช้งานอย่างเต็มรูปแบบในแอปข้อมูลโค้ด