如何在Material DateRangePicker中设置可选日期区间(minDate与maxDate)?
为Material DateRangePicker设置可选日期区间
要限制DateRangePicker的可选日期范围,你需要通过CalendarConstraints来定义约束规则,具体实现步骤如下:
- 创建
CalendarConstraints.Builder实例,用于配置日期限制条件 - 调用
setStart()和setEnd()方法,分别传入允许选择的最小、最大日期的UTC时间戳 - 将构建好的
CalendarConstraints通过MaterialDatePicker.Builder的setCalendarConstraints()方法传入Picker
完整代码示例
// 1. 定义允许选择的最小和最大日期(示例为2024年全年,可按需调整) val minDate = Calendar.getInstance().apply { set(2024, Calendar.JANUARY, 1) }.timeInMillis val maxDate = Calendar.getInstance().apply { set(2024, Calendar.DECEMBER, 31) }.timeInMillis // 2. 构建日期约束 val dateConstraints = CalendarConstraints.Builder() .setStart(minDate) .setEnd(maxDate) .build() // 3. 创建并配置DateRangePicker val dateRangePicker = MaterialDatePicker.Builder.dateRangePicker() .setTitleText(getString(R.string.calendar_select_dates)) .setSelection(...) .setCalendarConstraints(dateConstraints) // 关键:绑定日期范围约束 .build()
补充:用LocalDate转换时间戳(API 26+或兼容库)
如果项目使用Java 8+的时间API,可直接用LocalDate转换为UTC时间戳:
import java.time.LocalDate import java.time.ZoneOffset val minLocalDate = LocalDate.of(2024, 1, 1) val minDate = minLocalDate.atStartOfDay(ZoneOffset.UTC).toInstant().toEpochMilli() val maxLocalDate = LocalDate.of(2024, 12, 31) val maxDate = maxLocalDate.atStartOfDay(ZoneOffset.UTC).toInstant().toEpochMilli()
内容的提问来源于stack exchange,提问作者TinaTT2
相关产品推荐
相关产品推荐

