【问题标题】:How to disable past dates in MaterialDatePicker?如何在 MaterialDatePicker 中禁用过去的日期?
【发布时间】:2020-08-06 20:43:24
【问题描述】:
 //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 方法选择当前日期和 setStart 仅适用于当前月份所以我无法选择上个月的日期,但 我仍然可以选择当前月份的过去日期。

如果有任何可以帮助我。请告诉我。谢谢。

【问题讨论】:

    标签: android datepicker android-datepicker material-components-android material-components


    【解决方案1】:

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

    类似:

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

    【讨论】:

    • 我这样做了,但对我来说它工作正常,但我无法从您的代码中选择当前日期。它也阻止选择当前日期。
    • 1. 我还想问一件事,假设我选择了下个月的日期,然后我打开日历,而不是选择了该日期,但日历不会滚动到该月。知道怎么做吗? 2. 如果我将 builder 实例从 datepicker() 更改为 daterangepicker() 它不采用默认主题并且 不打开作为dailog,它以全屏方式打开
    • @DeepakRajput 你的问题不太清楚。 DateValidator 是启用/禁用日期的方法。您在 from 方法中使用哪个值?您使用的是哪个版本的库以及您在应用中使用的主题?
    • 我的意思是您的日期验证器正在工作,但它不允许我选择当前日期。它允许我从当前日期后的第二天开始选择。所以假设今天是 24,那么我不能选择 24,我只能从 25 中选择。
    • @DeepakRajput 这取决于您在 from 方法中使用的值(以 UTC 毫秒为单位)。如果您需要验证所有日期>= 现在只需使用dateValidator = DateValidatorPointForward.now();
    【解决方案2】:

    您需要为此创建自己的DateValidator。启用/禁用日期取决于 DateValidator.isValid() 返回 true 还是 false

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

    然后将此验证器用作:

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

    【讨论】:

    • 同样的事情发生在您的代码无法选择当前日期。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 2017-08-02
    • 2021-04-15
    相关资源
    最近更新 更多