如何防止Android Material DatePickerDialog选择将来的日期

时间:2015-07-23 12:19:00

标签: android

我正在尝试创建一个DatePickerDialog,不允许用户以后选择某些内容。我看到许多解决方案说我应该使用 setMaxDate(System.currentTimeMillis());但这不适用于材质对话框。它确实阻止用户在当月之后进行选择,但是本月的未来日期只是灰显但仍可选择。请参阅下面的代码。

DatePickerDialog dialog = new DatePickerDialog(rootView.getContext(), new DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(final DatePicker datePicker, final int year, final int monthOfYear, final int dayOfMonth) {
        dateTime = dateTime.withYear(year);
        dateTime = dateTime.withMonthOfYear(monthOfYear + 1);
        dateTime = dateTime.withDayOfMonth(dayOfMonth);

        if (dateTime.isAfter(DateTime.now())) {
            dateTime = new DateTime();
            Snackbar.make(rootView, R.string.future_date_not_allowed, Snackbar.LENGTH_LONG).show();
        }

        setDateTime(dateTime);
    }
}, dateTime.getYear(), dateTime.getMonthOfYear() - 1, dateTime.getDayOfMonth());

dialog.getDatePicker().setMaxDate(System.currentTimeMillis());
dialog.show();

正如您所看到的,我们正在使用Jodatime来卸载一些复杂性。我现在检查一旦用户选择了日期,如果真的不是将来,即使我已经使用setMaxDate指定了它。

在下面的图片中你可以看到今天是7月23日,我选择了7月29日。如果我按好,我的SnackBar会显示。比今天晚的所有东西都是灰色的,但仍然可以选择....甚至不让我开始使用TimePicker;)

Picker example

TL; DR

我如何实际阻止用户选择将来的日期?

1 个答案:

答案 0 :(得分:-1)

您可以使用它来防止将来的日期。

mDatePicker.setMaxDate(System.currentTimeMillis());