Подтвердить что ты не робот

Возможность выбора будущей даты при установке максимальной даты в 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? Кто-нибудь может подтвердить?

4b9b3361

Ответ 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 значение даты, используемое для конкретной один (например, текущая дата) и показать тост, чтобы сообщить ему.