¿Cómo establecer un límite mínimo y máximo para un selector de fecha en android?

Estoy trabajando en una aplicación en la que estoy usando un selector personalizado de fecha y hora. He creado un cuadro de diálogo y dentro de que estoy mostrando selección de fecha y hora, respectivamente, ahora quiero establecer un límite mínimo y máximo para el selector de fecha. Tal como uno no debe ser capaz de seleccionar la fecha anterior a partir de hoy y no más de un mes por delante. Este es mi codigo

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); final DatePicker picker = new DatePicker(getActivity()); try { Field f[] = picker.getClass().getDeclaredFields(); for (Field field : f) { if (field.getName().equals("mYearPicker") || field.getName().equals("mYearSpinner")) { field.setAccessible(true); Object yearPicker = new Object(); yearPicker = field.get(picker); ((View) yearPicker).setVisibility(View.GONE); } } } catch (Exception ex) { ex.printStackTrace(); } picker.setCalendarViewShown(false); picker.setMinDate(new Date().getTime()); builder.setTitle("Please select date on which you would be leaving :") .setView(picker) .setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { SimpleDateFormat parseFormat = new SimpleDateFormat("EEE dd MMM"); Date date1 = new Date(); date1.setDate(picker.getDayOfMonth()); date1.setMonth(picker.getMonth()); final String s = parseFormat.format(date1); Log.e("DATE", s); SimpleDateFormat sdf=new SimpleDateFormat("MM-dd-yyyy"); Date date2=new Date(); date2.setDate(picker.getDayOfMonth()); date2.setMonth(picker.getMonth()); final String s2=sdf.format(date2); //Time picker AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); final TimePicker picker = new TimePicker(getActivity()); picker.setIs24HourView(true); builder.setTitle("Please select time at which you would be leaving :") .setView(picker) .setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { int hour = picker.getCurrentHour(); int minute = picker.getCurrentMinute(); leaving.setTextSize(14); leaving.setText(s + " " + hour + ":" + minute); inTime=s2+" "+hour+":"+minute; Log.e("inTime ",inTime); } }) .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { leaving.setText(""); inTime=""; dialog.dismiss(); } }).create().show(); //Time picker } } ) .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { leaving.setText(""); inTime=""; dialog.dismiss(); } } ) .create().show(); 

Por favor ayuda. Gracias

Pruebe esto, Esto muestra de hoy a la siguiente fecha de 5 años en el cuadro de diálogo datepicker.

 public class MainActivity extends Activity { TextView txtDatePicker; Calendar cal,cal1; long maxDate; Date date; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); cal = Calendar.getInstance(); cal1 = Calendar.getInstance(); txtDatePicker = (TextView) findViewById(R.id.txtDatePicker); txtDatePicker.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub DatePickerDialog dialog = new DatePickerDialog(MainActivity.this, new OnDateSetListener() { @Override public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, ""+arg1+"/"+(arg2+1)+"/"+arg3, Toast.LENGTH_SHORT).show(); } }, cal.YEAR, cal.MONTH, cal.DAY_OF_MONTH); dialog.getDatePicker().setMinDate(System.currentTimeMillis()); cal1.add(Calendar.YEAR, 5); dialog.getDatePicker().setMaxDate(cal1.getTimeInMillis()); dialog.show(); } }); } } 

Utilice este código.
Yo uso este código en mi aplicación.

  // Global declaration Calendar preferDate1 = new GregorianCalendar(); Calendar preferDate2 = new GregorianCalendar(); final Calendar c = Calendar.getInstance(); year = c.get(Calendar.YEAR); month = c.get(Calendar.MONTH); day = c.get(Calendar.DAY_OF_MONTH); private int year, month, day; // here preferredDate1 and preferredDate2 are textview preferredDate1.setOnClickListener(new OnClickListener() { @SuppressLint("NewApi") @Override public void onClick(View v) { DatePickerDialog dp = new DatePickerDialog(MainActivity.this, prefferedDate1Picker, preferDate1 .get(Calendar.YEAR), preferDate1.get(Calendar.MONTH), preferDate1.get(Calendar.DAY_OF_MONTH)); dp.getDatePicker().setMinDate(c.getTimeInMillis()); dp.show(); } }); private final DatePickerDialog.OnDateSetListener prefferedDate1Picker = new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) { preferDate1 = new GregorianCalendar(selectedYear, selectedMonth, selectedDay); preferredDate2.setText(""); preferredDate1.setText((selectedDay < 10 ? "0" + String.valueOf(selectedDay) : String.valueOf(selectedDay)) + "/" + (selectedMonth + 1 < 10 ? "0" + String.valueOf((selectedMonth + 1)) : String.valueOf((selectedMonth + 1))) + "/" + selectedYear); } }; // This will set date based on preferredDate1 // change here according to your need. If you want to add or remove one month then set based on data. In this I add one day in second data picker. preferredDate2.setOnClickListener(new OnClickListener() { @SuppressLint("NewApi") @Override public void onClick(View v) { DatePickerDialog dp2 = new DatePickerDialog(MainActivity.this, prefferedDate2Picker, preferDate2 .get(Calendar.YEAR), preferDate2.get(Calendar.MONTH), preferDate2.get(Calendar.DAY_OF_MONTH)); long mili = preferDate1.getTimeInMillis() + 86400000L; dp2.getDatePicker().setMinDate(mili); dp2.show(); } }); private final DatePickerDialog.OnDateSetListener prefferedDate2Picker = new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) { preferDate2 = new GregorianCalendar(selectedYear, selectedMonth, selectedDay+1); preferredDate2.setText((selectedDay < 10 ? "0" + String.valueOf(selectedDay) : String.valueOf(selectedDay)) + "/" + (selectedMonth + 1 < 10 ? "0" + String.valueOf((selectedMonth + 1)) : String.valueOf((selectedMonth + 1))) + "/" + selectedYear); } }; 
  • Test DatePickerDialog con robolectric
  • DatePickerDialog.OnDateSetListener no obtiene una devolución de llamada en dispositivos Samsung
  • Android - onCreateDialog se bloquea al devolver DatePickerDialog
  • Simon Ics Data Picker Diálogo lanza android.view.InflateException: Archivo XML binario línea # 20: Error al inflarse clase net.simonvt.widget.DatePicker
  • Cómo agregar fecha y hora a una vista de texto en android
  • DatePicker causas Excepción generada durante la representación en LayoutEditor
  • Datepicker con estilo diferente a la actividad
  • Selector de fecha y hora en una vista
  • Android: DatePicker y el cuadro de diálogo DatePicker
  • Cambiar los textos de los botones de DatePickerDialog
  • Establece los límites de fechas de datepicker de android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.