2015-05-15 7 views
12

Я нашел только один экземпляр этой проблемы в StackOverflow, который был без ответа (в прошлом году), поэтому я решил, что дам ему еще один снимок. (Android DatePicker/Dialog displaying incorrect month/s using min/max date, с фактическим изображением)Android DatePicker показывает недоступные месяцы при использовании пределов min/max

При настройке minDate и maxDate для Android DatePicker в нем будут отображаться месяцы, которые недоступны в пределах диапазона min и max. Я продемонстрирую эту проблему со следующими изображениями:

Когда я в MinDate:

When I'm at minDate

Когда я нахожусь в пределах между датой:

In between dates

Когда я нахожусь в maxDate:

At maxDate

Недоступные месяцы (в данном случае апрель и июнь) действуют как минимальные и максимальные значения в этой ситуации, поэтому, отправляясь в апреле, DatePicker будет снимать до 15 мая, или попытка сместить до июня переместит DatePicker на 22 мая.

Возможно ли сохранить эти (недоступные) месяцы скрытыми от просмотра, поэтому в этой тестовой ячейке единственной выбираемой частью будет дата? Также, имея в виду, что с интервалом между, например, 29 мая и 5 июня, июнь должен появиться в списке.

+0

Я не просмотрел код, но могу догадаться, что это, скорее всего, из-за того, что вы описали - в если часть месяца должна быть доступна, ему необходимо показать месяц в списке. Я предполагаю, что минимальный/минимальный код либерально показывает предыдущий/следующий месяц в списке в скроллере, чтобы немного упростить логику. Я полагаю, что пока пользователь не наберет/не подтвердит дату вне диапазона в конце процессов пользовательского интерфейса, я думаю, что все будет в порядке. В чем вы обеспокоены тем, что в некоторых случаях слишком много в скроллере? Это запутывает ваших пользователей? –

+0

В основном это. Пользователь не может выбрать какие-либо «недействительные» даты, но это было немедленной проблемой для наших тестировщиков (и это выглядело странно и для меня). Забота тестеров в основном с точки зрения UX, что мне понятно. Поэтому, если бы был способ разрешить это, было бы хорошо. Но, по внешнему виду, это просто функциональность, встроенная в Android, и, похоже, она не регулируется, к сожалению. – Kevin

+0

У меня была такая же проблема с тестировщиками, я сказал им, что так работает этот родной виджет, и у меня нет власти над ним, он сказал им отправить ошибку в google, если они захотят –

ответ

0

ВАРИАНТ 1. Вы можете использовать android-times-square

и дать в диапазоне дат, так что она затухает недоступные даты, дает более наглядное представление слишком

Calendar nextYear = Calendar.getInstance(); 
nextYear.add(Calendar.YEAR, 1); 

CalendarPickerView calendar = (CalendarPickerView) findViewById(R.id.calendar_view); 
Date today = new Date(); 
calendar.init(today, nextYear.getTime()) 
    .inMode(RANGE); 
0

Я установил эту проблему путем сброса Текущее время до полуночи:

Calendar date = Calendar.getInstance(); 
// reset hour, minutes, seconds and millis 
date.set(Calendar.HOUR_OF_DAY, 0); 
date.set(Calendar.MINUTE, 0); 
date.set(Calendar.SECOND, 0); 
date.set(Calendar.MILLISECOND, 0); 
datePicker.setMaxDate(date.getTimeInMillis());