Set MinDate and MaxDate in DatePIcker
正在创建一个我正在显示DatePicker的应用程序。现在我想将DatePicker的MinDate设置为前两年,将最大日期设置为未来两年。选择应该基于当前日期。假设当前Date为23/11/2016所以datepicker应该在DatePicker中显示直到2014年11月23日的日期,所有日期都应该在2014年11月23日之前被禁用。当我们单击Datepicker时,光标应该在当前日期上。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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(); } |
要设置今天之前两年的最小日期和今天之后两年的最大日期,请使用以下代码:
1 2 3 4 5 | 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()); |
我相信这段代码确实可以帮助您解决问题。
这是您的修复程序的代码-
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | 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,以便使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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()),然后使用以下方法设置其边界:
1 2 | setMinDate(long minDate) setMaxDate(long maxDate) |
该参数是自1970年1月1日以来默认时区中通常的毫秒数。当然,您仍然必须计算这些值,但这对于Calendar类来说应该是微不足道的:只需传递当前日期,然后从中减去x年即可。.