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

问题描述

我正在尝试使用 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
}

解决方法

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

今天:

val constraintsBuilder =
    CalendarConstraints.Builder()
        .setValidator(
            DateValidatorPointBackward.now())

enter image description here

如果您需要自定义日期(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))
,
val constraintsBuilder =
            CalendarConstraints.Builder()
                .setValidator(DateValidatorPointBackward.now())

val dataPicker = MaterialDatePicker.Builder.datePicker().apply {
            setTitleText("Select Previous Dates")
            setCalendarConstraints(constraintsBuilder.build())
        }.build()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...