Как отключить прошлые даты в MaterialDatePicker? - PullRequest
0 голосов
/ 23 апреля 2020
 //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 работает только для текущего месяца. Поэтому я не могу выбрать даты предыдущего месяца, но я все еще могу выбрать даты прошлого месяца.

Если кто-нибудь может мне помочь. Пожалуйста, дайте мне знать. Спасибо.

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

Вы можете создать свой собственный DateValidator или просто использовать DateValidatorPointForward, предоставляемый библиотекой.

Что-то вроде:

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

enter image description here

0 голосов
/ 23 апреля 2020

Для этого вам нужно создать свой собственный 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()
...