在datepicker中设置Mindate和MaxDate



创建我正在显示datepicker的应用程序。现在我想设置datepicker的思维是前两年,而最大约会只有两年的时间。选择应为当前日期。日期为2016年11月23日,因此日期应显示日期至2014年11月23日datepicker,所有日期应在2014年23/11/2014之前禁用所有日期/p>

private void showDateDailog() {
    final DatePickerDialog datePickerDialog = new DatePickerDialog(mContext, new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker datePicker, int selectedYear, int selectedMonth, int selectedDate) {
            year = selectedYear;
            month = selectedMonth;
            day = selectedDate;
          ((TextView) findViewById(R.id.textViewTORStartDate)).setText(new StringBuilder().append(day).append("/")
                        .append(month + 1).append("/").append(year));
        }
    }, year, month, day);
    datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis());
    datePickerDialog.show();
}

在两年前设置最小日期,并在今天两年后使用以下代码:

Calendar c = Calendar.getInstance();
c.add(Calendar.YEAR, -2); // subtract 2 years from now
datePickerDialog.getDatePicker().setMinDate(c.getTimeInMillis());
c.add(Calendar.YEAR, 4); // add 4 years to min date to have 2 years after now
datePickerDialog.getDatePicker().setMaxDate(c.getTimeInMillis());

我相信此代码确实可以帮助您提供修复程序。

这是您修复的代码 -

private void showDateDailog() {
final DatePickerDialog datePickerDialog = new DatePickerDialog(mContext, new DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(DatePicker datePicker, int selectedYear, int selectedMonth, int selectedDate) {
        year = selectedYear;
        month = selectedMonth;
        day = selectedDate;
      ((TextView) findViewById(R.id.textViewTORStartDate)).setText(new StringBuilder().append(day).append("/")
                    .append(month + 1).append("/").append(year));
    }
}, year, month, day);
final Calendar calendar = Calendar.getInstance();
Calendar cal = Calendar.getInstance();
int yy = calendar.get(Calendar.YEAR);
int mm = calendar.get(Calendar.MONTH);
int dd = calendar.get(Calendar.DAY_OF_MONTH);
//Min date setting part
cal.set(Calendar.MONTH, mm);
cal.set(Calendar.DAY_OF_MONTH, dd);
cal.set(Calendar.YEAR, yy - 2);
datePickerDialog.setMinDate(cal.getTimeInMillis());
//Maximum date setting part
Calendar calen = Calendar.getInstance();
calen.set(Calendar.MONTH, mm);
calen.set(Calendar.DAY_OF_MONTH, dd);
calen.set(Calendar.YEAR, yy + 2);
datePickerDialog.setMaxDate(calen.getTimeInMillis());
datePickerDialog.show();
}

您可以设置Mindate和MaxDate,以便您需要使用DatePicker类。

class MDatePickerDialog extends DatePickerDialog {
    MDatePickerDialog(Context c) {
        super(c, null, 2016, 11, 23);
        Date min = new Date(2018-1900, 4, 21);
        DatePicker p = getDatePicker();
        CalendarView cv = p.getCalendarView();
        long cur = cv.getDate();
        int d = cv.getFirstDayOfWeek();
        p.setMinDate(min.getTime());
        cv.setDate(cur + 1000L*60*60*24*40);
        cv.setFirstDayOfWeek((d + 1) % 7);
        cv.setDate(cur);
        cv.setFirstDayOfWeek(d);
    }
}

希望这对您有帮助。

您可以从datepickerdialog获得基础datepicker(通过简单地调用getDatePicker())并使用以下方式设置界限:

setMinDate(long minDate)
setMaxDate(long maxDate)

自1970年1月1日以来,该论点是通常在默认时区的00:00:00以来通常的毫秒数。当然,您仍然必须计算这些值,但这对于日历类别来说应该很微不足道:只需传递当前日期,然后从中添加或提取X年。。

最新更新