Установить ограничения даты Android DatePicker

Я использую datePicker в Android для отображения изображений на основе выбранных пользователем дат. Мне нужно ограничить указанные даты определенными днями, например, с 1 января 2010 года по 31 декабря 2010 года. Я думал, что все просто, но где я могу найти ответ о том, как ограничить эти даты.

Кто-нибудь знает, как ограничить даты для Android DatePicker


person brass    schedule 26.03.2010    source источник
comment
Мне удалось программно установить минимальные, максимальные выбираемые даты, а также установить текущую (по умолчанию) дату для представления DatePicker: stackoverflow.com/questions/6421874/   -  person Abdo Belk    schedule 02.11.2011


Ответы (5)


Вы можете просто установить:

dateDialog.getDatePicker().setMaxDate(new Date().getTime());

и

dateDialog.getDatePicker().setMinDate(new Date().getTime());

где dateDialog - это

new DatePickerDialog()

и тип параметра для установки MaxDate и MinDate - это long

person cokeby190    schedule 07.07.2014

Может быть, уже слишком поздно отвечать, но легко установить дату min и max для DatePickerDialog. Подходит для всех версий Android. Просто вам нужно вернуть DatePickerDialog на основе версии Android

protected Dialog onCreateDialog(int id)
{
    switch ( id )
    {
        case DATE_DIALOG_ID:
            DatePickerDialog dialog = null;
            if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB )
            {
                dialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener()
                {
                    @Override
                    public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDate)
                    {
                        mTextView.setText(selectedDate + "/" + selectedMonth + 1 + "/" + selectedYear);
                    }
                }, year, month - 1, date);
                Calendar currentDate = Calendar.getInstance();
                dialog.getDatePicker().setMaxDate(currentDate.getTimeInMillis());
                //If you need you can set min date too
            }
            else
            {
                dialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener()
                {
                    @Override
                    public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDate)
                    {
                        mTextView.setText(selectedDate + "/" + selectedMonth + 1 + "/" + selectedYear);
                    }
                }, year, month - 1, date)
                {
                    @Override
                    public void onDateChanged(DatePicker view, int year, int month, int day)
                    {
                        if ( year <= maxYear && month + 1 <= maxMonth && date <= maxDate ) //meets your criteria
                        {
                            view.updateDate(year, month, date); //update the date picker to selected date
                        }
                        else
                        {
                            view.updateDate(maxYear, maxMonth - 1, maxDate); // or you update the date picker to previously selected date
                        }
                    }
                };
            }
            return dialog;
    }
    return null;
}
person Sankar V    schedule 30.08.2013

Я думаю, вам нужно реализовать свой собственный DatePicker. Логика, лежащая в основе этого, будет следующей: «Только несколько разработчиков когда-либо ограничивали DatePicker, поэтому им приходилось самим реализовывать функциональность».

person MrSnowflake    schedule 26.03.2010
comment
Также для XML доступны некоторые дополнительные свойства, такие как endYear beginYear, вы можете использовать их для границ. - person Pentium10; 26.03.2010
comment
где бы я мог найти информацию о endYear beginYear, похоже, это сработало бы очень хорошо. Я боялся, что ответ будет реализован самостоятельно, надеюсь, эти свойства xml сработают. - person brass; 26.03.2010
comment
границы endYear и beginYear работают только с виджетом, а не с фактическим диалоговым окном datePicker, которое я использую. Вместо этого я посмотрю, как реализовать виджет, если только кто-нибудь не может предложить информацию о том, как применить границы к диалоговому окну. - person brass; 31.03.2010

Почему вы не должны создавать новый макет, такой как DatePicker, с customoption. Вы можете сделать с Spinners и Forloops.

person Sivakumar    schedule 08.05.2014

Вы можете добиться этого, набрав простую строку

mDatePicker.getDatePicker().setMinDate(System.currentTimeMillis());
        mcurrentDate.add(Calendar.MONTH,6);
        mDatePicker.getDatePicker().setMaxDate(mcurrentDate.getTimeInMillis());
person ND1010_    schedule 14.03.2017