我使用AppCompat v21定位并使用API级别21进行构建。
它给了我一个看起来很漂亮的新日期选择器,它具有允许我选择使用
设置max date的未来日期的意外属性datePicker.setMaxDate(Calendar.getInstance().getTimeInMillis())
未来的日期是灰色的,但我仍然可以选择其中任何一个。那是一个错误吗?我做错了吗?有没有办法阻止用户在日期选择器中选择未来的日期?
旧Holo日期选择器不允许在设置最长日期时选择未来日期。
更新
虽然它在我的Nexus 4运行库存5.0上无法正常工作,但它在我的Nexus 6运行库存Android 5.1.1上运行正常。也许这是Android 5.0中的一个错误,并在5.1中修复了?任何人都可以确认吗?
答案 0 :(得分:21)
所以回答我自己的问题:
我在grepcode上查看了DatePickerCalendarDelegate.java
的Android来源,特别是public void setMaxDate(long maxDate)
的Android版5.0和5.1。
setMaxDate()
中5.1的新内容是
mDayPickerView.goTo(getSelectedDay(), false, true, true);
已更改为:
mDayPickerView.setMaxDate(maxDate);
似乎他们把它固定在那里,这与我的观察结果一致,即它在5.1中有效,但在5.0中没有。
所以我们似乎仍然坚持处理它在Android 5.0中无法正常运行的事实(最大日期之后的天数会变灰但仍然可以选择)。
答案 1 :(得分:2)
我正在使用此功能并且工作正常
调用此函数打开日期选择器
public void openDatePicker() {
DatePickerDialog dpd = new DatePickerDialog(this, mDateSetListener, mYear, mMonth, mDay);
dpd.getDatePicker().setMaxDate(System.currentTimeMillis());
dpd.show();
}
这是 mDateSetListener
private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
mYear = year;
mMonth = monthOfYear;
mDay = dayOfMonth;
date.setText(dayOfMonth + " / " + (monthOfYear + 1) + " / " + year); // Here date is a TextView to display date
date.setVisibility(View.VISIBLE);
}
};
答案 2 :(得分:-1)
您可以使用一种方法,在该方法中,您可以传递用户输入的日期值,并将其与当前日期进行比较,如果是未来日期,则可以重置用于特定日期的日期值(例如当前的日期)并举起祝酒通知他。
答案 3 :(得分:-2)
您可以在CSS上解决此问题,方法是找到合适的元素(带有“ disabled”类)并将指针事件设置为none。`
.bs-datepicker-body table td.disabled {
pointer-events: none;
}