Restrict Range in Android DatePicker Custom Dialog

后端 未结 3 1459
野的像风
野的像风 2020-12-21 03:08

I have a custom linear layout which has DatePicker and TimePicker widgets in it. This is used as DateTime picker. I want to restrict t

3条回答
  •  再見小時候
    2020-12-21 03:24

    The Material Components Library provides the MaterialDatePicker.
    You can use a DateValidator to restrict the selections.
    In particular you can use the built-in validators:

    • DateValidatorPointForward that enables dates from a given point forward
    • DateValidatorPointBackward that enables only dates before a given point.

    Something like:

    MaterialDatePicker.Builder> builderRange = MaterialDatePicker.Builder.dateRangePicker();
    CalendarConstraints.Builder constraintsBuilderRange = new CalendarConstraints.Builder();
    
    //....define min and max for example with LocalDateTime and ZonedDateTime or Calendar
    
    CalendarConstraints.DateValidator dateValidatorMin = DateValidatorPointForward.from(min.getTimeInMillis());
    CalendarConstraints.DateValidator dateValidatorMax = DateValidatorPointBackward.before(max.getTimeInMillis());
    
    ArrayList listValidators =
                new ArrayList();
    listValidators.add(dateValidatorMin);
    listValidators.add(dateValidatorMax);
    CalendarConstraints.DateValidator validators = CompositeDateValidator.allOf(listValidators);
    constraintsBuilderRange.setValidator(validators);
    
    builderRange.setCalendarConstraints(constraintsBuilderRange.build());
    MaterialDatePicker> pickerRange = builderRange.build();
    pickerRange.show(getSupportFragmentManager(), pickerRange.toString());
    

提交回复
热议问题