Как установить ограничение на дату в диалоговом окне выбора даты

Я хочу установить ограничение на дату, чтобы пользователь не мог выбрать дату больше, чем это, например, если сегодня 1 января, пользователь не должен иметь возможность выбирать более 7 дат, я имею в виду, что он не может выбрать 9 января. Я также хочу, чтобы он не выбирал месяц и год. Поэтому я ставлю ограничение, чтобы поставить ему задачу в одну неделю.

то, что я сделал до сих пор, это показать фрагмент выбора даты и установить в нем текущую дату. код в моей основной деятельности выглядит следующим образом:

etSelectDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DialogFragment datePickerFragment = new DatePickerFragment() {
                    @Override
                    public void onDateSet(DatePicker view, int year, int month, int day) {
                        Log.d("Date Change", "onDateSet");
                        Calendar c = Calendar.getInstance();
                        c.set(year, month, day);
                        DateFormat df = DateFormat.getDateInstance();
                        etSelectDate.setText(df.format(c.getTime()));
                        //nextField.requestFocus(); //moves the focus to something else after dialog is closed

                    }
                };
                datePickerFragment.show(MainActivity.this.getSupportFragmentManager(), "datePicker");

            }
        });

и класс фрагмента выбора даты выглядит следующим образом:

 public static class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener{

        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            // Use the current date as the default date in the picker
            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);

            // Create a new instance of DatePickerDialog and return it
            return new DatePickerDialog(getActivity(), this, year, month, day);
        }

        @Override
        public void onDateSet(DatePicker view, int year, int month, int day) {
            //blah
        }
    }

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

Поэтому, пожалуйста, помогите мне, как я могу установить ограничение только на семь дней?

Обновить

Благодаря вашим ответам я знаю, как установить максимальную дату в календаре, поэтому, поскольку я хочу установить максимальную дату на 7 дней раньше текущей даты, я все еще не получаю ее. метод, который я прочитал до сих пор:

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

Он устанавливает текущую дату как максимальную, но как я могу добавить в нее 7 дней вперед, поскольку это объект Date? пожалуйста помоги


person stacy queen    schedule 25.06.2015    source источник
comment
вы можете пройти весь поток здесь: stackoverflow.com/questions/18272306/   -  person strike    schedule 25.06.2015
comment
Проверьте это stackoverflow.com/a/45671497/6478047.   -  person Manohar    schedule 14.08.2017
comment
Я использую средство выбора даты. Он отлично работает. Но при открытии сборщика мне нужно показать год по умолчанию как десять лет назад. Но мне прокрутка пользователя должна отображаться до текущего года. Есть ли у него какой-либо способ показать дату по умолчанию в виджете, и при прокрутке вверх или вниз он должен показывать год, как обычно.   -  person sejn    schedule 19.01.2021


Ответы (4)


В вашем распоряжении есть методы setMinDate(long) и setMaxDate(long). Оба они будут работать на уровне API 11 и выше. Поскольку вы используете DatePickerDialog, вам нужно сначала получить базовый DatePicker, вызвав метод getDatePicker().

dpdialog.getDatePicker().setMinDate(minDate);  
dpdialog.getDatePicker().setmaxDate(maxDate);  

Источник: Установить ограничение на DatePickerDialog в Android?

Вы можете рассчитать minDate, используя

Date today = new Date();
Calendar c = Calendar.getInstance();
c.setTime(today);
c.add( Calendar.MONTH, -6 ) // Subtract 6 months
long minDate = c.getTime().getTime() // Twice!  

Обновлено:

Замените строку ниже

return new DatePickerDialog(getActivity(), this, year, month, day);

с участием

 // Create a new instance of DatePickerDialog and return it
    DatePickerDialog pickerDialog = new DatePickerDialog(getActivity(), this, year, month, day);
    pickerDialog.getDatePicker().setMaxDate(maxDate);
    pickerDialog.getDatePicker().setMinDate(minDate);
    return pickerDialog;
person Kartheek    schedule 25.06.2015
comment
Я видел этот поток ранее, но как я могу реализовать в моем случае - person stacy queen; 25.06.2015
comment
@stacyqueen Обновил мой ответ, посмотри - person Kartheek; 25.06.2015
comment
так как я могу установить ограничение в семь дней на максимальной дате? и минимальная дата точно будет текущей датой? - person stacy queen; 25.06.2015
comment
Ваше решение мне очень помогло, но есть в нем одна проблема - person stacy queen; 25.06.2015
comment
@stacyqueen В чем проблема? - person Kartheek; 26.06.2015
comment
Давайте продолжим обсуждение в чате. - person stacy queen; 26.06.2015
comment
После установки setMaxDate для datePicker setMaxDate всегда выделяется и выбирается, вот изображение - person hasnain_ahmad; 15.06.2017

В некоторых случаях, когда вы устанавливаете максимальную дату с датой без часов и минут, вы не сможете выбрать установленную максимальную дату. Например

 Calendar maxDate = Calendar.getInstance();
            maxDate.set(Calendar.DAY_OF_MONTH, day + 5);
            maxDate.set(Calendar.MONTH, month);
            maxDate.set(Calendar.YEAR, year);

 datePickerDialog.getDatePicker().setMaxDate(maxDate.getTimeInMillis());

С блоком кода выше вы не можете нажать на свой maxDate.

Но если вы добавите часы и минуты, чтобы понравиться;

            maxDate.set(Calendar.HOUR, 23);
            maxDate.set(Calendar.MINUTE, 59);

до вашей maxDate, ваша последняя дата будет кликабельной

person dgngulcan    schedule 23.12.2015

используя

setMinDate и setMaxDate

MinDate

MaxDate

person Neal Ahluvalia    schedule 25.06.2015
comment
не могли бы вы уточнить это подробнее. где я могу это использовать и в каком формате - person stacy queen; 25.06.2015

попробуй это

DatePickerDialog dpDialog = new DatePickerDialog(this, pDateSetListener, pYear, pMonth, pDay);
DatePicker datePicker = dpDialog.getDatePicker();

Calendar calendar = Calendar.getInstance();//get the current day
datePicker.setMaxDate(calendar.getTimeInMillis());//set the current day as the max date or put yore date in miliseconds.
datePicker.setMinDate(calendar.getTimeInMillis());//set the current day as the min date or put your date in mili seconds format
return dpDialog;
person mdDroid    schedule 25.06.2015