【发布时间】:2020-07-30 07:20:48
【问题描述】:
我在 Android (Kotlin) 上使用 MaterialDatePicker,需要确保开始日期和结束日期相隔不超过 180 天。如何为此编写约束?
【问题讨论】:
标签: android kotlin android-datepicker material-components-android
我在 Android (Kotlin) 上使用 MaterialDatePicker,需要确保开始日期和结束日期相隔不超过 180 天。如何为此编写约束?
【问题讨论】:
标签: android kotlin android-datepicker material-components-android
您可以自定义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());
【讨论】:
DateValidatorPointBackward.now();