Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set Limit on the DatePickerDialog in Android?

How to limit on DatePickerDialog to choose a date from 2-12 years in the past or from 0-2 years from the current date?

I have DatePickerDialog in activity which is used for getting the date of birth for child and infant. Child age will be (2-12yrs) and infant age can be (0-2ys). If I pass 1 then the age limit should be (2-12yrs) and if I pass 2 the age limit should be (0-2yrs).

What could I do to get this functionality in my calendar?

My Calender code is:

date = new DatePickerDialog.OnDateSetListener() {              @Override             public void onDateSet(DatePicker view, int year, int monthOfYear,                     int dayOfMonth) {                 // TODO Auto-generated method stub                 myCalendar.set(Calendar.YEAR, year);                 myCalendar.set(Calendar.MONTH, monthOfYear);                 myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);                 String myFormat = "dd/MM/yy"; //In which you need put here                 SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);                 dateofBirth.setText(sdf.format(myCalendar.getTime()));             }         };  dateofBirth.setOnClickListener(new OnClickListener() {              @Override             public void onClick(View v) {                 // TODO Auto-generated method stub                 showDialog(DATE_DIALOG_ID);              }         });  public Dialog onCreateDialog(int id) {     final Calendar now = Calendar.getInstance();      switch (id) {     case DATE_DIALOG_ID:         // set date picker as current date         DatePickerDialog _date =   new DatePickerDialog(this, date,myCalendar                 .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),                 myCalendar.get(Calendar.DAY_OF_MONTH)){             @Override              public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth){                     if (year > now.get(Calendar.YEAR))                      view.updateDate(myCalendar                             .get(Calendar.YEAR), myCalendar                             .get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH));                  if (monthOfYear > now.get(Calendar.MONTH) && year == now.get(Calendar.YEAR))                     view.updateDate(myCalendar                             .get(Calendar.YEAR), myCalendar                             .get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH));                  if (dayOfMonth > now.get(Calendar.DAY_OF_MONTH) && year == now.get(Calendar.YEAR) &&                          monthOfYear == now.get(Calendar.MONTH))                     view.updateDate(myCalendar                             .get(Calendar.YEAR), myCalendar                             .get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH));             }          };          return _date;     }     return null; } 
like image 347
Developer Avatar asked Aug 16 '13 11:08

Developer


People also ask

What is date picker in angular?

The datepicker allows users to enter a date either through text input, or by choosing a date from the calendar. It is made up of several components, directives and the date implementation module that work together. Basic datepicker.


2 Answers

All the other answers seem rather convoluted, so I'm just going to state the obvious: you can get the underlying DatePicker from a DatePickerDialog (by simply calling getDatePicker()) and set its bounds using:

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

Where the argument is the usual number of milliseconds since January 1, 1970 00:00:00 in the default time zone. You'll still have to calculate these values of course, but that should be trivial to do with the Calendar class: just take the current date and add or substract x years.

The more attentive reader will notice that the aforementioned setters weren't available until API level 11. If you're targeting that (or newer) platform only, then you're good to go. If you also want to support i.e. Gingerbread devices (Android 2.3 / API level 9+), you can use a backported version of DatePicker in stead.

like image 177
MH. Avatar answered Sep 28 '22 19:09

MH.


Setting minumum and maximum date for the DatePickerDialog is not enough. User can click on the year and scroll in between years.

You should also set year range on the DatePicker like this:

datePicker.setYearRange(calendar.get(Calendar.YEAR), calendar.get(Calendar.YEAR) + 1); 
like image 34
Oguz Ozcan Avatar answered Sep 28 '22 19:09

Oguz Ozcan