Select 使用 MaterialDateTimePicker 的时间块
Select blocks of time with MaterialDateTimePicker
我想展示一个时钟,其中只能 selected 时间块可以 selected。例如:我希望时钟只让我 select 次从 09:00 到 10:00 或从 12:00 到 12:30 或从 14:00 到18:00。这些范围之外的所有时间都不应该 selectable.
使用 MaterialDateTimePicker 我能够设置 selected 时间的数组:
val time = TimePickerDialog.newInstance(timeSet, true)
time.setSelectableTimes(arrayOf(Timepoint(10), Timepoint(11)))
但这只让我 select 10:00 和 11:00 的时间,而不是它们之间的时间间隔。
是否可以像我用这个库解释的那样做一个行为?
我对 "additional options" 类别进行了一些挖掘(实际上就是您链接的类别),并发现了 enableMinutes(true)
。根据文档,这默认为 true,所以我不确定它是如何在您的代码中被禁用的。如果您还想启用选择秒数,请使用 enableSeconds(true)
.
引用文档:
TimepickerDialog
enableSeconds(boolean enableSconds)
and enableMinutes(boolean enableMinutes)
Allows you to enable or disable a seconds and minutes picker on the TimepickerDialog
. Enabling the seconds picker, implies enabling the minutes picker. Disabling the minute picker will disable the seconds picker. The last applied setting will be used. By default enableSeconds = false
and enableMinutes = true
.
所以我决定创建一个新方法来创建时间点数组:
private fun getTimes(array: JSONArray): Array<Timepoint> {
val times = arrayListOf<Timepoint>()
for (i in 0..array.length().minus(1)) {
val format = SimpleDateFormat("HH:mm", Locale.getDefault())
val start = Calendar.getInstance()
start.time = format.parse(array.getJSONObject(i).getString("start"))
val end = Calendar.getInstance()
end.time = format.parse(array.getJSONObject(i).getString("end"))
while (!start.after(end)) {
times.add(Timepoint(start.get(Calendar.HOUR_OF_DAY), start.get(Calendar.MINUTE)))
start.add(Calendar.MINUTE, 1)
}
}
return times.toArray(arrayOfNulls<Timepoint>(times.size))
}
我会这样称呼他:
time.setSelectableTimes(getTimes(array))
解释:
使用方法:
time.setSelectableTimes(arrayOf(Timepoint(10), Timepoint(11)))
我只能分别选择10:00h和11:00h的时间,所以解决方法是找到10:00h和11:00h之间的所有时间,将它们添加到数组中。只有这样我才能使用这个新数组调用上面的方法。
我想展示一个时钟,其中只能 selected 时间块可以 selected。例如:我希望时钟只让我 select 次从 09:00 到 10:00 或从 12:00 到 12:30 或从 14:00 到18:00。这些范围之外的所有时间都不应该 selectable.
使用 MaterialDateTimePicker 我能够设置 selected 时间的数组:
val time = TimePickerDialog.newInstance(timeSet, true)
time.setSelectableTimes(arrayOf(Timepoint(10), Timepoint(11)))
但这只让我 select 10:00 和 11:00 的时间,而不是它们之间的时间间隔。
是否可以像我用这个库解释的那样做一个行为?
我对 "additional options" 类别进行了一些挖掘(实际上就是您链接的类别),并发现了 enableMinutes(true)
。根据文档,这默认为 true,所以我不确定它是如何在您的代码中被禁用的。如果您还想启用选择秒数,请使用 enableSeconds(true)
.
引用文档:
TimepickerDialog
enableSeconds(boolean enableSconds)
andenableMinutes(boolean enableMinutes)
Allows you to enable or disable a seconds and minutes picker on theTimepickerDialog
. Enabling the seconds picker, implies enabling the minutes picker. Disabling the minute picker will disable the seconds picker. The last applied setting will be used. By defaultenableSeconds = false
andenableMinutes = true
.
所以我决定创建一个新方法来创建时间点数组:
private fun getTimes(array: JSONArray): Array<Timepoint> {
val times = arrayListOf<Timepoint>()
for (i in 0..array.length().minus(1)) {
val format = SimpleDateFormat("HH:mm", Locale.getDefault())
val start = Calendar.getInstance()
start.time = format.parse(array.getJSONObject(i).getString("start"))
val end = Calendar.getInstance()
end.time = format.parse(array.getJSONObject(i).getString("end"))
while (!start.after(end)) {
times.add(Timepoint(start.get(Calendar.HOUR_OF_DAY), start.get(Calendar.MINUTE)))
start.add(Calendar.MINUTE, 1)
}
}
return times.toArray(arrayOfNulls<Timepoint>(times.size))
}
我会这样称呼他:
time.setSelectableTimes(getTimes(array))
解释:
使用方法:
time.setSelectableTimes(arrayOf(Timepoint(10), Timepoint(11)))
我只能分别选择10:00h和11:00h的时间,所以解决方法是找到10:00h和11:00h之间的所有时间,将它们添加到数组中。只有这样我才能使用这个新数组调用上面的方法。