如何在Android DatePicker中设置最小和最大date?

我使用Android的默认dateselect器和我最小支持的SDK是10,我想设置dateselect器的最小和最大date。

这是我的MainActivity类在onCreate方法之后:

private void registerButtonListeners() { Calendar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showDialog(DATE_PICKER_DIALOG); } }); } @Override protected Dialog onCreateDialog(int id) { switch(id) { case DATE_PICKER_DIALOG: return showDatePicker(); } return super.onCreateDialog(id); } private DatePickerDialog showDatePicker() { DatePickerDialog datePicker= new DatePickerDialog(MainActivity.this,android.R.style.Theme_Holo_Dialog_NoActionBar_MinWidth,new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { mCalendar.set(Calendar.YEAR,year); mCalendar.set(Calendar.MONTH,monthOfYear); mCalendar.set(Calendar.DAY_OF_MONTH,dayOfMonth); updateDateText(); } },mCalendar.get(Calendar.YEAR),mCalendar.get(Calendar.MONTH),mCalendar.get(Calendar.DAY_OF_MONTH)); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { long d=1356994800000L; //datePicker.getDatePicker().setMinDate(d); //datePicker.getDatePicker().setMaxDate(1546210800000L); } return datePicker; } 

您可以从DatePickerDialog(通过简单地调用getDatePicker())获取基础DatePicker,并使用下面的方法设置边界:

  • setMinDate(long minDate)
  • setMaxDate(long maxDate)

自variables是默认时区1970年1月1日00:00:00以来的通常毫秒数。 当然,你仍然需要计算这些值,但是对于Calendar类来说,这应该是微不足道的:只需要传递当前date,然后添加或减去x年。

在iOS的默认DatePicker ,它提供了设置min的function。 和最大。 dateselect器的date。 Android应用程序开发中也提供了相同的function,但适用于Android API 11及更高版本。 这意味着最小和最大date范围的function将不适用于Android API 11以下的设备。

为了克服这类问题,并且在所有Android设备(包括Android API 11以下的设备)中支持此function,我们不得不扩展“DatePickerDialog”类以提供设置可以select的最小和最大date范围的function。 检查下面给出的链接 –

如何在Android应用程序中使用具有最大和最小date范围的自定义DatePicker控件

有关实施的说明,请查看下面的链接 –

在我们的应用程序中解释Custom DatePicker的实现

我通过以下解决这个问题

 DatePickerDialog datePickerDialog; final Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH); int day = c.get(Calendar.DAY_OF_MONTH); datePickerDialog = new DatePickerDialog(getActivity(), this, year, month, day); datePickerDialog.getDatePicker().setMinDate(c.getTimeInMillis()); 

希望它会帮助你