Capaz de elegir la fecha futura al establecer la fecha máxima en datepicker

Estoy apuntando y construyendo con API nivel 21, usando AppCompat v21.

Me da un nuevo recolector de fecha que tiene la propiedad inesperada de permitirme elegir una fecha futura cuando la fecha máxima se ha fijado usando

datePicker.setMaxDate(Calendar.getInstance().getTimeInMillis()) 

Las fechas futuras están en gris, pero todavía puedo elegir cualquiera de ellos. ¿Eso es un error? ¿Lo estoy haciendo mal? ¿Existe alguna manera de evitar que el usuario pueda elegir una fecha futura en el selector de fechas?

El recolector de fecha viejo de Holo no permitió escoger una fecha futura al fijar una fecha máxima.

ACTUALIZAR:

Aunque no funciona correctamente en mi Nexus 4 corriendo stock 5.0, está funcionando correctamente en mi Nexus 6 corriendo Android 5.1.1. Tal vez fue un error en Android 5.0 y se corrigió en 5.1? ¿Puede alguien confirmar?

Así que para responder a mi propia pregunta:

He mirado la fuente Android de DatePickerCalendarDelegate.java en grepcode, específicamente en public void setMaxDate(long maxDate) para ambas versiones de Android 5.0 y 5.1 .

¿Qué hay de nuevo en 5.1 en setMaxDate() es que

mDayPickerView.goTo(getSelectedDay(), false, true, true);

Ha cambiado a:

mDayPickerView.setMaxDate(maxDate);

Parece que lo arreglaron allí, lo que corresponde a mi observación de que funciona como se esperaba en 5.1 pero no en 5.0.

Y por lo que parece que estamos atascados con tratar con el hecho de que no funciona correctamente en Android 5.0 (días después de la fecha máxima están en gris, pero todavía se puede elegir).

Estoy usando esto y su funcionamiento correctamente

Llame a esta función para abrir el selector de fechas

 public void openDatePicker() { DatePickerDialog dpd = new DatePickerDialog(this, mDateSetListener, mYear, mMonth, mDay); dpd.getDatePicker().setMaxDate(System.currentTimeMillis()); dpd.show(); } 

Aquí está el 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); } }; 

Puede utilizar un método en el que u puede pasar el valor de la fecha introducida por el usuario y compararlo, por ejemplo, con la fecha actual, si es una fecha futura u puede restablecer el valor de la fecha utilizada para una determinada (por ejemplo, la Fecha actual) y mostrar un brindis por informarle.

  • Convertir la fecha y la hora en milisegundos en Android
  • Cómo establecer datePickerMode = "spinner" de forma programática?
  • Uso de DatePicker sin selector de día
  • SetSpinnersShown y setCalendarViewShown en DatePicker obsoleto en el nivel 24 de API
  • El nombre del mes aparece con el número M + en el cuadro de diálogo datePicker en android
  • DatePicker en un DialogFragment ignora setCalendarViewShown
  • Android 5.0 Datepicker en scrollview no funciona (no se desplaza meses)
  • Android DatePicker muestra meses no disponibles cuando se usan límites min / max
  • DatePicker no funciona al intentar utilizarlo
  • Cómo mostrar la fecha seleccionada en EditText utilizando DialogFragment
  • Fecha de formato de Android a MM-DD-AAAA de Datepicker
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.