我正在尝试创建一个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;)
TL; DR
我如何实际阻止用户选择将来的日期?
答案 0 :(得分:-1)
您可以使用它来防止将来的日期。
mDatePicker.setMaxDate(System.currentTimeMillis());