Android 在datepicker中设置最大日期时,可以选择未来日期

Android 在datepicker中设置最大日期时,可以选择未来日期,android,datepicker,Android,Datepicker,我的目标是使用AppCompat v21,并使用API级别21进行构建 它给了我一个漂亮的新日期选择器,它有一个意想不到的特性,允许我在使用 datePicker.setMaxDate(Calendar.getInstance().getTimeInMillis()) 未来的日期是灰色的,但我仍然可以选择其中任何一个。那是虫子吗?我做错了吗?有没有办法阻止用户在日期选择器中选择未来日期 旧的全息日期选择器在设置最大日期时不允许拾取未来日期 更新: 虽然它在我的Nexus4运行股票5.0上不能正

我的目标是使用AppCompat v21,并使用API级别21进行构建

它给了我一个漂亮的新日期选择器,它有一个意想不到的特性,允许我在使用

datePicker.setMaxDate(Calendar.getInstance().getTimeInMillis())
未来的日期是灰色的,但我仍然可以选择其中任何一个。那是虫子吗?我做错了吗?有没有办法阻止用户在日期选择器中选择未来日期

旧的全息日期选择器在设置最大日期时不允许拾取未来日期

更新:


虽然它在我的Nexus4运行股票5.0上不能正常工作,但在我的Nexus6运行股票Android 5.1.1上却能正常工作。也许这是安卓5.0中的一个bug,在5.1中得到了修复?有人可以确认吗?

您可以使用一种方法,通过该方法,您可以传递用户输入的日期值,并将其与当前日期进行比较,如果是未来日期,您可以将使用的日期值重置为特定日期(例如当前日期),并显示祝酒词以通知他

我正在使用它,它工作正常

调用此函数以打开日期选择器

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);
        }
    };

因此,回答我自己的问题:

我在grepcode上查看了
datepickercalendarderregate.java
的Android源代码,特别是对于Android版本和

setMaxDate()
中5.1的新功能是

mDayPickerView.goTo(getSelectedDay(),false,true,true)

已更改为:

mDayPickerView.setMaxDate(maxDate)

似乎他们在那里解决了这个问题,这与我的观察结果一致,即它在5.1中按预期工作,但在5.0中没有


因此,我们似乎一直在处理这样一个事实,即它在Android 5.0中无法正常工作(max date之后的天数变灰,但仍然可以选择)。

您可以在CSS中找到正确的元素(带有“禁用”类)并将指针事件设置为none来解决这个问题`

.bs-datepicker-body table td.disabled {
      pointer-events: none;
}

谢谢,我意识到我可以做到,但我以前不必这么做(用老的日期选择器),我觉得现在不得不这么做很奇怪。我想知道我是否可以让日期选择器不允许选择未来的日期(如果不允许,我想知道Android团队是否有意这样做,或者这是一个错误),那么我们该怎么办?如果用户选择了未来的日期,我只需忽略所选日期,并显示错误消息(snackbar或toast)。另一个解决方案也可以是使用另一个日期选择器,也许在onDateSet()中,我们可以设置一个类似于Calendar=Calendar.getInstance()的检查;日历集(年、月、月);Calendar calendar1=Calendar.getInstance();如果(calendar.getTime().after(calendar1.getTime()){Toast.makeToast(getApplicationContext),“请选择一个有效的日期Toast.LENGTH_LONG).show();return;}问题是关于Android框架编码,而不是CSS