Ограничить выбор календаря только одним месяцем

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

Скажите, например:

Текущая дата: 04.04.2019 – представление календаря должно отображаться только до 31 05 2019, а предыдущий месяц не должен отображаться.

Другой пример: если сегодняшняя дата: 15.08.2019 - представление календаря должно отображаться только до 30.09.2019 и не должно показывать предыдущий месяц.

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


person Sanjana Nair    schedule 04.04.2019    source источник


Ответы (1)


Это может вам помочь.

Calendar myCalendar = Calendar.getInstance();
        DatePickerDialog.OnDateSetListener date = (view, year, monthOfYear, dayOfMonth) -> {
            // TODO Auto-generated method stub
            myCalendar.set(Calendar.YEAR, year);
            myCalendar.set(Calendar.MONTH, monthOfYear);
            myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
        };

И при вызове представления календаря.

yourView.setOnClickListener(v -> {
            DatePickerDialog dialog = new DatePickerDialog(AddReview.this, date, myCalendar
                    .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                    myCalendar.get(Calendar.DAY_OF_MONTH));
            myCalendar.add(Calendar.DATE, 30);// This line adds days to MaxDate.
            dialog.getDatePicker().setMaxDate(myCalendar.getTime().getTime());
            dialog.getDatePicker().setMinDate(new Date().getTime());
            dialog.show();
        });

Теперь вы можете рассчитать свои дни по текущей дате и соответственно добавить лимит.

person kvaruna    schedule 04.04.2019
comment
Если я прав: он покажет 30 дней с даты выбора. Например, сегодня 4 апреля, по вашей логике в календаре будет отображаться до 4 мая. если это так, это не сработает для меня. - person Sanjana Nair; 04.04.2019
comment
@SanjanaNair Вам нужно рассчитать оставшиеся дни этого месяца и следующего месяца и заменить их на 30, это единственное, что, я думаю, вам нужно сделать. И что касается вашего вопроса, я постарался ответить. Никаких проблем, если это не работает для вас. - person kvaruna; 04.04.2019