Как установить минимальную и максимальную даты в Android DatePicker?

Я использую стандартное средство выбора даты в Android, и мой поддерживаемый min SDK равен 10, и я хочу установить минимальные и максимальные даты средства выбора даты.

Вот что я имею в своем классе MainActivity после метода onCreate:

private void registerButtonListeners() {
    Calendar.setOnClickListener(new View.OnClickListener() 
    {   
        @Override
        public void onClick(View v) {
            showDialog(DATE_PICKER_DIALOG);
        }
    });
}

@Override
protected Dialog onCreateDialog(int id)
{
    switch(id)
    {
    case DATE_PICKER_DIALOG: return showDatePicker();

    }
    return super.onCreateDialog(id);
}
private DatePickerDialog showDatePicker()
{
        DatePickerDialog datePicker= new DatePickerDialog(MainActivity.this,android.R.style.Theme_Holo_Dialog_NoActionBar_MinWidth,new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear,
                    int dayOfMonth) {
                mCalendar.set(Calendar.YEAR,year);
                mCalendar.set(Calendar.MONTH,monthOfYear);
                mCalendar.set(Calendar.DAY_OF_MONTH,dayOfMonth);
                updateDateText();

            }
        },mCalendar.get(Calendar.YEAR),mCalendar.get(Calendar.MONTH),mCalendar.get(Calendar.DAY_OF_MONTH));


        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
        {
            long d=1356994800000L;
            //datePicker.getDatePicker().setMinDate(d);
            //datePicker.getDatePicker().setMaxDate(1546210800000L);

        }
        return datePicker;
}

3 ответа

Вы можете получить базовый DatePicker из DatePickerDialog (просто вызвав getDatePicker()) и установить его границы, используя:

Где аргумент - это обычное количество миллисекунд с 1 января 1970 года 00:00:00 в часовом поясе по умолчанию. Конечно, вам все равно придется вычислять эти значения, но это должно быть тривиально для класса Calendar: просто передать текущую дату и добавить или вычесть x лет из этого..

Я решил это следующим

DatePickerDialog datePickerDialog;
final Calendar c = Calendar.getInstance();
    int year = c.get(Calendar.YEAR);
    int month = c.get(Calendar.MONTH);
    int day = c.get(Calendar.DAY_OF_MONTH);
    datePickerDialog = new DatePickerDialog(getActivity(), this, year, month, day);
    datePickerDialog.getDatePicker().setMinDate(c.getTimeInMillis());    

надеюсь, это поможет вам

По умолчанию DatePicker iOS предоставляет возможность установки мин. и макс. дата для выбора даты. Эта же функция также доступна при разработке приложений для Android, но она доступна для Android API 11 и выше. Это означает, что функция минимального и максимального диапазона дат не будет работать на устройствах ниже Android API 11.

Чтобы решить эту проблему и поддержать эту функцию на всех устройствах Android, включая устройства под Android API 11, нам пришлось расширить класс "DatePickerDialog", чтобы обеспечить возможность установки минимального и максимального диапазона дат, который можно выбрать. Проверьте ссылку, приведенную ниже

Как сделать пользовательский элемент управления DatePicker с максимальным и минимальным диапазоном дат в приложении Android

Для объяснения реализации, пожалуйста, проверьте ссылку ниже

Объясните реализацию Custom DatePicker в нашем приложении

Другие вопросы по тегам