如何禁用 MaterialDatePicker 中的过去日期?

How to disable past dates in MaterialDatePicker?

 //Material Date Picker
private val calendar = Calendar.getInstance()
private val constraintsBuilder = CalendarConstraints.Builder().setStart(calendar.timeInMillis)
private val builder = MaterialDatePicker.Builder.datePicker()
private val picker = builder
    .setSelection(calendar.timeInMillis)
    .setInputMode(MaterialDatePicker.INPUT_MODE_CALENDAR)
    .setCalendarConstraints(constraintsBuilder.build())
    .build()

我正在使用上面的代码打开日历 setSelection 方法 select 当前日期和 setStart 仅适用于当前月份所以我无法 select 前一个月的日期但是 我可以仍然 select 本月过去的日期。

有的话可以帮帮我。请告诉我。谢谢

您需要为此创建自己的 DateValidator。 enabled/disabled 的日期取决于 DateValidator.isValid() returns 是真还是假

@Parcelize
class FutureDateValidator : CalendarConstraints.DateValidator {
    override fun isValid(date: Long): Boolean {
        return date > System.currentTimeMillis()
    }
}

然后将此验证器用作:

CalendarConstraints.Builder()
    .setValidator(FutureDateValidator())
    .build()

您可以构建自己的 DateValidator,也可以只使用图书馆提供的 DateValidatorPointForward

类似于:

//Returns a DateValidator which enables days from {@code point}, in 
//UTC milliseconds, forward
CalendarConstraints.DateValidator dateValidator = DateValidatorPointForward.from(yourDate);
constraintsBuilder.setValidator(dateValidator);