简体   繁体   中英

Cannot Set Min and Max for Datpicker in Java Android

Stuck on how to set up a minimum and maximum date with the DatePicker, so for instance the user can't set the date pass the current date. Similarly the user won't be able select a date before 1960, so far I've been able to set up the DatePicker my code is below:

 public class MainActivity extends FragmentActivity {

        EditText mEdit;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }

        public void selectDate(View view) {
            DialogFragment newFragment = new SelectDateFragment();
            newFragment.show(getSupportFragmentManager(), "DatePicker");
        }
        public void populateSetDate(int year, int month, int day) {
            mEdit = (EditText)findViewById(R.id.editText1);
            mEdit.setText(month+"/"+day+"/"+year);
        }
        public class SelectDateFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
            @Override
            public Dialog onCreateDialog(Bundle savedInstanceState) {
                final Calendar calendar = Calendar.getInstance();
                int yy = calendar.get(Calendar.YEAR);
                int mm = calendar.get(Calendar.MONTH);
                int dd = calendar.get(Calendar.DAY_OF_MONTH);
                return new DatePickerDialog(getActivity(), this, yy, mm, dd);
            }

            public void onDateSet(DatePicker view, int yy, int mm, int dd) {
                populateSetDate(yy, mm+1, dd);
            }
        }

    }

In DatePickerDialog there is two method for setting the min and max date which takes input time as milliseconds

Min Date of Picker

Max Date of Picker

So the code will be like

DatePickerDialog d = new DatePickerDialog(getActivity(), this, yy, mm, dd);
DatePicker dp = d.getDatePicker();
dp.setMaxDate(maxDate);
dp.setMinDate(minDate);
return d;

But this method is available in API Level 11 .

You can try something like below.

public class DatePickerDialogWithMaxMinRange extends DatePickerDialog {

 static int maxYear=2014;  // max date which you want to set
 static int maxMonth=11;
 static int maxDay=31;

 int minYear=1960;        // min date which you want to set
 int minMonth=0;
 int minDay=1;


public DatePickerDialogWithMaxMinRange(Context context,  OnDateSetListener callBack,int minYear,int minMonth,int minDay,int maxYear,int maxMonth,int maxDay) {
    super(context,callBack, maxYear, maxMonth, maxDay);
    this.minDay = minDay;
    this.minMonth = minMonth;
    this.minYear = minYear;
    DatePickerDialogWithMaxMinRange.maxDay = maxDay;
    DatePickerDialogWithMaxMinRange.maxMonth = maxMonth;
    DatePickerDialogWithMaxMinRange.maxYear = maxYear;
}

@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
    super.onDateChanged(view, year, monthOfYear, dayOfMonth);

        if (year > maxYear ||monthOfYear > maxMonth && year == maxYear||
                 dayOfMonth > maxDay && year == maxYear && monthOfYear == maxMonth){
            view.updateDate(maxYear, maxMonth, maxDay);
            }else if(year < minYear ||monthOfYear < minMonth && year == minYear||
                 dayOfMonth < minDay && year == minYear && monthOfYear == minMonth){
             view.updateDate(minYear, minMonth, minDay );
            }
     }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM