能够在datepicker中设置最大日期时选择将来的日期

时间:2015-02-11 16:01:09

标签: android datepicker

我使用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中修复了?任何人都可以确认吗?

4 个答案:

答案 0 :(得分:21)

所以回答我自己的问题:

我在grepcode上查看了DatePickerCalendarDelegate.java的Android来源,特别是public void setMaxDate(long maxDate)的Android版5.05.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;
}