2015-05-15 16 views
12

Ho trovato solo un'altra istanza di questo problema su StackOverflow che non ha ricevuto risposta (l'anno scorso), quindi ho pensato di dargli un'altra possibilità. (Android DatePicker/Dialog displaying incorrect month/s using min/max date, con un'immagine effettiva)Android DatePicker mostra i mesi non disponibili quando si utilizzano i limiti min/max

Quando si impostano i dati minDate e maxDate di Android DatePicker, verranno visualizzati i mesi non disponibili nell'intervallo di date min e max. io dimostrare questo problema con le seguenti immagini:

Quando sono al MinDate:

When I'm at minDate

Quando sono tra i limiti di data:

In between dates

Quando sono al max. Data:

At maxDate

I mesi non disponibili (in questo caso aprile e giugno) fungono da valori min e max in questa situazione, quindi andando ad aprile, DatePicker scatterà fino al 15 maggio, o cercando di scorrere fino a giugno sposterà DatePicker in il 22 maggio.

E 'possibile mantenere quei mesi (non disponibili) nascosti alla vista, quindi in questo testcase, l'unica parte selezionabile sarebbe la data? Tenendo presente che, con un intervallo tra ad esempio il 29 maggio e il 5 giugno, giugno deve apparire nell'elenco.

+0

Non ho guardato attraverso il codice, ma posso immaginare che è molto probabilmente dovuto a come descrivi - nel Nel caso in cui una parte del mese debba essere disponibile, è necessario mostrare il mese nell'elenco. Immagino che il codice min/max sia liberale nel mostrare il mese precedente/successivo nella lista nello scroller per semplificare un po 'la logica. Immagino che, fintanto che non consenta all'utente di selezionare/confermare una data al di fuori dell'intervallo alla fine dei processi dell'interfaccia utente, penso che starai bene. Qual è la tua preoccupazione con esso mostrando troppo nello scroller in alcuni casi? Sta confondendo i tuoi utenti? –

+0

Fondamentalmente quello. L'utente non può selezionare date "non valide", ma è stata una preoccupazione immediata per i nostri tester (e beh, mi sembrava strano anche a me). La preoccupazione dei tester è principalmente da un punto di vista UX, il che è comprensibile per me. Quindi, se ci fosse un modo per risolvere questo, sarebbe stato bello. Ma dal suo aspetto, questa è semplicemente funzionalità che è integrata in Android e non sembra essere regolabile, purtroppo. – Kevin

+0

Ho avuto lo stesso problema con i tester, ho detto loro che era il modo in cui questo widget nativo funziona e non ho alcun potere su di esso, ho detto loro di inviare un bug su google se volevano –

risposta

0

OPZIONE 1. Si potrebbe utilizzare android-times-square

e dare in un intervallo di date personalizzato in modo che sfuma le date non disponibili, dà la rappresentazione più visuale troppo

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

Ho risolto quel problema reimpostando l'ora corrente a mezzanotte:

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());