I am trying to set the min and max date of the date picker in Android to before API level 11. I used the following code:
mDatePickerField = startDatePickerDi
Based on @yostyle's answer, I've made a method which sets the minimum and maximum date for an DatePicker. My DatePicker was used inside an AlertDialog because I needed some extra customizations, but this method can be used directly on any DatePickerDialog or for any custom DatePicker's:
/**
* Compat utility method that will set the minimum date and the maximum date for the DatePicker view.
*
* If the current API is greater than 11, than the normal {@link android.widget.DatePicker#setMinDate(long)} and
* {@link android.widget.DatePicker#setMaxDate(long)} methods will be used.
*
*
* @param minCalendar
* The minimum date for the picker
* @param maxCalendar
* The maximum date for the picker
*/
private void initDatePickerCompat(final Calendar minCalendar, final Calendar maxCalendar) {
if (null == mDatePicker) {
// Exit early if DatePicker view was not initialized
return;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
// (mDatePicker is a DatePicker)
mDatePicker.setMinDate(minCalendar.getTimeInMillis());
mDatePicker.setMaxDate(maxCalendar.getTimeInMillis());
} else {
final int minYear = minCalendar.get(Calendar.YEAR);
final int minMonth = minCalendar.get(Calendar.MONTH);
final int minDay = minCalendar.get(Calendar.DAY_OF_MONTH);
final int maxYear = maxCalendar.get(Calendar.YEAR);
final int maxMonth = maxCalendar.get(Calendar.MONTH);
final int maxDay = maxCalendar.get(Calendar.DAY_OF_MONTH);
mDatePicker.init(minYear, minMonth, minDay, new DatePicker.OnDateChangedListener() {
@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
Calendar newCalendar = Calendar.getInstance();
newCalendar.set(year, monthOfYear, dayOfMonth);
if (newCalendar.after(maxCalendar)) {
// MAX
view.updateDate(maxYear, maxMonth, maxDay);
} else if (newCalendar.before(minCalendar)) {
// MIN
view.updateDate(minYear, minMonth, minDay);
} else {
// BETWEEN
view.updateDate(year, monthOfYear, dayOfMonth);
}
}
});
}
}
Keep in mind that this method should be called after DatePicker was initialized, like this:
mDatePicker = (DatePicker) view.findViewById(R.id.datePicker);
mDatePicker.init(year, monthOfYear, dayOfMonth, this);
DateTime minDate = new DateTime();
DateTime maxDate = minDate.plusYears(10);
// Set the minimum and the maximum date for the date picker
initDatePickerCompat(minDate.toCalendar(Locale.getDefault()), maxDate.toCalendar(Locale.getDefault()));