Возможность выбора будущей даты при установке максимальной даты в datepicker
Я ориентируюсь и создаю с уровнем API 21, используя AppCompat v21.
Это дает мне красиво выглядящий новый сборщик дат, который обладает неожиданным свойством позволить мне выбрать будущую дату, когда максимальная дата была с помощью
datePicker.setMaxDate(Calendar.getInstance().getTimeInMillis())
Будущие даты выделены серым цветом, но я все равно могу выбрать любой из них. Это ошибка? Я делаю это неправильно? Есть ли способ не дать пользователю возможность выбрать дату в дате?
Старый выбор даты Holo не позволял выбирать дату в будущем при установке максимальной даты.
UPDATE:
В то время как он не работает должным образом на моем Nexus 4, работающем под управлением 5.0, он работает правильно на моем Nexus 6 под управлением Android 5.1.1. Возможно, это была ошибка в Android 5.0, и она была исправлена в версии 5.1? Кто-нибудь может подтвердить?
Ответы
Ответ 1
Итак, чтобы ответить на мой собственный вопрос:
Я посмотрел на источник Android DatePickerCalendarDelegate.java
на grepcode, особенно на public void setMaxDate(long maxDate)
для обеих версий Android 5.0 и 5.1.
Что нового в 5.1 в setMaxDate()
заключается в том, что
mDayPickerView.goTo(getSelectedDay(), false, true, true);
изменено на:
mDayPickerView.setMaxDate(maxDate);
Кажется, они исправили его там, что соответствует моему наблюдению, что он работает как ожидается в 5.1, но не в 5.0.
Итак, похоже, что мы застряли в том, что он не работает должным образом в Android 5.0 (дни после того, как максимальная дата выделена серым цветом, но все еще может быть выбрана).
Ответ 2
Я использую это и правильно его работаю
Вызов этой функции для открытия выбора даты
public void openDatePicker() {
DatePickerDialog dpd = new DatePickerDialog(this, mDateSetListener, mYear, mMonth, mDay);
dpd.getDatePicker().setMaxDate(System.currentTimeMillis());
dpd.show();
}
Вот mDateSetListener
private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
mYear = year;
mMonth = monthOfYear;
mDay = dayOfMonth;
date.setText(dayOfMonth + " / " + (monthOfYear + 1) + " / " + year); // Here date is a TextView to display date
date.setVisibility(View.VISIBLE);
}
};
Ответ 3
Вы можете использовать метод, в котором u может передать значение даты, введенной пользователем, и сравнить его, например, с текущей датой, если это будущая дата u может reset значение даты, используемое для конкретной один (например, текущая дата) и показать тост, чтобы сообщить ему.