为materialDatePicker 设置 180 天的日历约束

ish*_*err 8 android android-datepicker kotlin material-components-android

我使用MaterialDatePicker的是 Android (Kotlin),需要确保开始日期和结束日期相距不超过 180 天。我该如何编写这个约束?

Gab*_*tti 3

您可以定义一个自定义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;
    }
Run Code Online (Sandbox Code Playgroud)

进而:

    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());
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • @ishherr 一般来说是的,你可以使用 `DateValidatorPointBackward.now();` (2认同)