如何禁用 Android MaterialDatePicker 中的未来日期?

Ank*_*and 2 android android-datepicker kotlin material-components-android

我正在尝试使用 MaterialDatePicker 创建一个简单的 DatePicker,其中未来日期被禁用。我尝试了其他类似 StackOverflow 问题的答案,但没有成功。到目前为止,这是我的代码:-

val datePicker = MaterialDatePicker.Builder.datePicker().apply {
        setTitleText(getString(R.string.label_select_dob))
        setCalendarConstraints(limitRange().build())
    }.build()

 private fun limitRange(): CalendarConstraints.Builder {
    val calendarStart: Calendar = Calendar.getInstance()
    val calendarEnd: Calendar = Calendar.getInstance()
    val year = 1900
    val startMonth = 1
    val startDate = 1
    calendarStart.set(year, startMonth, startDate)
    calendarEnd.set(2021, 3, 27)
    val minDate: Long = calendarStart.timeInMillis
    val maxDate: Long = calendarEnd.timeInMillis

    val constraintsBuilder = CalendarConstraints.Builder()
    val validators: ArrayList<CalendarConstraints.DateValidator> = ArrayList()
    validators.add(DateValidatorPointForward.from(minDate))
    validators.add(DateValidatorPointBackward.before(maxDate))
    constraintsBuilder.setValidator(CompositeDateValidator.allOf(validators))

    return constraintsBuilder
}
Run Code Online (Sandbox Code Playgroud)

Gab*_*tti 8

要禁用未来日期,只需使用DateValidatorPointBackward图书馆提供的。

与今天:

val constraintsBuilder =
    CalendarConstraints.Builder()
        .setValidator(
            DateValidatorPointBackward.now())
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果您需要自定义日期(4 月 1 日之后的所有日期):

    val calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"))
    calendar[Calendar.DAY_OF_MONTH] = 1
    calendar[Calendar.MONTH] = Calendar.APRIL
    val april = calendar.timeInMillis

    val constraintsBuilder =
        CalendarConstraints.Builder()
            .setValidator(
                DateValidatorPointBackward.before(april))
Run Code Online (Sandbox Code Playgroud)