android - open - Capaz de elegir la fecha futura al configurar la fecha máxima en el selector de fechas
obtener fecha de un datepicker android (3)
Estoy apuntando y construyendo con el nivel 21 de API, usando AppCompat v21.
Me da un nuevo selector de fecha con un aspecto agradable, que tiene la propiedad inesperada de permitirme elegir una fecha futura cuando la fecha máxima se ha establecido con
datePicker.setMaxDate(Calendar.getInstance().getTimeInMillis())
Las fechas futuras están en gris, pero todavía puedo elegir cualquiera de ellas. ¿Es eso un error? ¿Lo estoy haciendo mal? ¿Hay alguna forma de evitar que el usuario pueda elegir una fecha futura en el selector de fechas?
El antiguo selector de fechas de Holo no permitía elegir una fecha futura al establecer una fecha máxima.
ACTUALIZAR:
Si bien no funciona correctamente en mi Nexus 4 running stock 5.0, funciona correctamente en mi Nexus 6 running stock 5.1.1. Tal vez fue un error en Android 5.0 y fue corregido en 5.1? ¿Alguien puede confirmar?
Así que para responder a mi propia pregunta:
He mirado la fuente de Android de DatePickerCalendarDelegate.java
en grepcode, específicamente en public void setMaxDate(long maxDate)
para las versiones de Android 5.0 y 5.1 .
Lo nuevo en 5.1 en setMaxDate()
es que
mDayPickerView.goTo(getSelectedDay(), false, true, true);
ha sido cambiado a:
mDayPickerView.setMaxDate(maxDate);
Parece que lo arreglaron allí, lo que corresponde con mi observación de que funciona como se esperaba en 5.1 pero no en 5.0.
Y, por lo tanto, parece que estamos atascados con el hecho de que no funciona correctamente en Android 5.0 (los días posteriores a la fecha máxima aparecen en gris, pero aún se pueden elegir).
Puede usar un método en el que u puede pasar el valor de la fecha ingresada 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 a uno específico (por ejemplo, fecha actual) y mostrar un brindis para informarle.
Estoy usando esto y está funcionando 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);
}
};