【问题标题】:set calendar constraints of 180 days for materialDatePicker为 materialDatePicker 设置 180 天的日历限制
【发布时间】:2020-07-30 07:20:48
【问题描述】:

我在 Android (Kotlin) 上使用 MaterialDatePicker,需要确保开始日期和结束日期相隔不超过 180 天。如何为此编写约束?

【问题讨论】:

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


    【解决方案1】:

    您可以自定义DateValidator:

    public class RangeDateValidator implements CalendarConstraints.DateValidator {
    
        private MaterialDatePicker rangePicker;
        private final int numberOfDays;
    
        public RangeDateValidator(int numberOfDays){
           this.numberOfDays = numberOfDays;
        }
    
        public void setDatePicker(MaterialDatePicker rangePicker) {
            this.rangePicker = rangePicker;
        }
    
        @Override
        public boolean isValid(long date) {
            Pair<Long,Long> selection = (Pair<Long, Long>) rangePicker.getSelection();
            if (selection != null) {
                Long startDate = selection.first;
                if (startDate != null) {
                    long days = (numberOfDays-1) * TimeUnit.DAYS.toMillis(1);;
                    if (date > startDate + days)
                        return false;
                    if (date < startDate)
                        return false;
                }
            }
            return true;
        }
    

    然后:

        MaterialDatePicker.Builder<Pair<Long, Long>> builder = 
            MaterialDatePicker.Builder.dateRangePicker();
    
    
        CalendarConstraints.Builder constraintsBuilderRange = new CalendarConstraints.Builder();
        RangeDateValidator dateValidator = new RangeDateValidator(10);
        constraintsBuilderRange.setValidator(dateValidator);
        builder.setCalendarConstraints(constraintsBuilderRange.build());
    
        MaterialDatePicker<Pair<Long, Long>> datePicker= builder.build();
        dateValidator.setDatePicker(datePicker);
        datePicker.show(getSupportFragmentManager(),datePicker.getTag());
    

    【讨论】:

    • 我能做到只允许过去的日期吗?不允许未来的日期?
    • @ishherr 一般是的,你可以使用DateValidatorPointBackward.now();
    猜你喜欢
    • 2020-03-17
    • 1970-01-01
    • 2023-01-18
    • 2014-08-28
    • 1970-01-01
    • 2011-01-20
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多