Bộ chọn giờ giúp người dùng chọn giờ. Bạn có thể sử dụng các thành phần kết hợp TimePicker
và TimeInput
để triển khai bộ chọn giờ trong ứng dụng.
Loại
Có hai loại bộ chọn giờ:
- Quay số: Cho phép người dùng đặt thời gian bằng cách di chuyển tay điều khiển quanh mặt số.
- Đầu vào: Cho phép người dùng đặt thời gian bằng bàn phím.
Hình ảnh sau đây cung cấp ví dụ về bộ chọn thời gian quay số ở bên trái và bộ chọn thời gian nhập ở bên phải:
Nền tảng API
Để triển khai bộ chọn giờ, hãy sử dụng thành phần kết hợp TimePicker
hoặc TimeInput
:
TimePicker
: Triển khai bộ chọn thời gian quay số.TimeInput
: Triển khai bộ chọn thời gian nhập.
Trạng thái
Đối với cả TimePicker
và TimeInput
, bạn cũng phải truyền TimePickerState
. Điều này cho phép bạn đặt thời gian đã chọn mặc định xuất hiện trên bộ chọn. Phương thức này cũng ghi lại thời gian mà người dùng đã chọn bằng bộ chọn.
Hộp thoại
Bộ chọn giờ xuất hiện trong hộp thoại. Các ví dụ trong hướng dẫn này không sử dụng hộp thoại. Để biết các ví dụ sử dụng hộp thoại, hãy xem hướng dẫn Hộp thoại cho bộ chọn thời gian.
Bộ chọn giờ trên mặt đồng hồ
Đoạn mã này minh hoạ cách triển khai bộ chọn thời gian quay số cơ bản.
@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") } } }
Hãy cân nhắc những điều sau trong đoạn mã này:
Calendar.getInstance()
khởi chạyTimePickerState
bằng thời gian hiện tại.- Ví dụ này sử dụng
java.util.Calendar
. Bật tính năng đơn giản hoá API Java 8 trở lên trong dự án để sử dụngjava.time.LocalTime
trên tất cả các phiên bản Android.
- Ví dụ này sử dụng
- Thành phần kết hợp
TimePicker
hiển thị bộ chọn giờ, lấytimePickerState
làm tham số. - Quá trình triển khai bao gồm 2 nút: một nút để xác nhận lựa chọn và nút còn lại để đóng bộ chọn.
Phương thức triển khai có dạng như sau:
Nhập bộ chọn giờ
Đoạn mã này minh hoạ cách triển khai bộ chọn thời gian của kiểu nhập cơ bản.
@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") } } }
Những điểm chính cần lưu ý trong quá trình triển khai này:
- Về cơ bản, cấu trúc này giống với bộ chọn thời gian quay số, điểm khác biệt chính là việc sử dụng
TimeInput
thay vìTimePicker
. - Tham số
is24Hour
chotimePickerState
được đặt rõ ràng thànhtrue
. Theo mặc định, giá trị này làfalse
.
Phương thức triển khai có dạng như sau:
Sử dụng trạng thái
Để tận dụng thời gian mà người dùng đã chọn trong một bộ chọn giờ, hãy chuyển TimePickerState
thích hợp vào hàm onConfirm
của bạn. Sau đó, thành phần kết hợp mẹ có thể truy cập vào thời gian đã chọn thông qua TimePickerState.hour
và TimePickerState.minute
.
Đoạn mã sau đây minh hoạ cách thực hiện việc này:
@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") } } }
Sau đó, bạn có thể gọi thành phần kết hợp như sau:
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.")
}
Để biết thêm thông tin chi tiết, hãy xem phần triển khai đầy đủ trong ứng dụng đoạn mã.