2015-05-15 10 views
12

Znalazłem tylko 1 inny przypadek tego problemu na StackOverflow, który był bez odpowiedzi (zeszły rok), więc pomyślałem, że dam mu kolejny zastrzyk. (Android DatePicker/Dialog displaying incorrect month/s using min/max date, z rzeczywistym obrazem)Android DatePicker pokazuje niedostępne miesiące przy użyciu limitów min/max

Podczas ustawiania minDate i maxDate Androida DatePicker, pokaże miesiące, które będą niedostępne w zakresie min. I maks. Daty. będę wykazać tę kwestię z następujących obrazów:

Kiedy jestem na minDate:

When I'm at minDate

Kiedy jestem w granicach między Data:

In between dates

Gdy jestem na maxDate:

At maxDate

Niedostępne miesiące (w tym przypadku kwiecień i czerwiec) działają jak wartości minimalne i maksymalne w tej sytuacji, więc wyjazd do kwietnia, gdy DatePicker zostanie nakręcony do 15 maja, lub próba przejścia do czerwca przeniesie DatePicker do 22 maja.

Czy można ukryć te (niedostępne) miesiące, więc w tym przypadku jedyną wybieraną częścią byłaby data? Pamiętaj również, że w odstępie między np. 29 maja a 5 czerwca, czerwiec musi pojawić się na liście.

+0

Nie przejrzałem kodu, ale domyślam się, że najprawdopodobniej wynika to z opisu - w W przypadku gdy część miesiąca musi być dostępna, musi pokazać miesiąc na liście. Zgaduję, że kod min/max jest liberalny, pokazując poprzedni/następny miesiąc na liście w scrollerze, aby nieco uprościć logikę. Myślę, że tak długo, jak nie pozwala on użytkownikowi wybrać/potwierdzić daty poza zakresem na końcu procesów interfejsu użytkownika, myślę, że wszystko będzie dobrze. Jaki jest Twój niepokój związany z tym, że w niektórych przypadkach jest zbyt wiele w przewijaku? Czy mylą użytkowników? –

+0

Zasadniczo to. Użytkownik nie może wybrać żadnych "nieważnych" dat, ale był to bezpośredni problem dla naszych testerów (no cóż, dla mnie też wydawało mi się to dziwne). Obawy testerów są głównie z punktu widzenia UX, co jest dla mnie zrozumiałe. Więc jeśli istnieje sposób, aby to rozwiązać, byłoby miło. Ale wygląda na to, że jest to po prostu funkcjonalność wbudowana w system Android i niestety nie jest regulowana. – Kevin

+0

Miałem ten sam problem z testerami, powiedziałem im, że to jest sposób działania tego rodzimego widżetu i nie mam nad nim władzy, kazałem im przesłać błąd w Google, jeśli chcieli –

Odpowiedz

0

wariant 1. Można użyć android-times-square

i dać w wybranym zakresie dat, tak że zanika niedostępnych dat, daje więcej reprezentację wizualną zbyt

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

naprawiłem ten problem poprzez zresetowanie aktualny czas do północy:

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()); 
Powiązane problemy