Android datepicker min max date before api level 11

前端 未结 7 530
生来不讨喜
生来不讨喜 2020-11-27 06:11

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         


        
7条回答
  •  情深已故
    2020-11-27 06:29

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

提交回复
热议问题