在DatePickerDialog android中设置日期限制

时间:2014-10-19 10:01:34

标签: android datepicker

我在我的活动中使用DatePickerDialog,

我想按用户设置DatePickerDialog的日期限制。

他们不应该选择超过当前日期的日期。

我的DatePickerDialog java代码

edittodate.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            edittodate.setText("");

             final Calendar mcurrentDate=Calendar.getInstance();
               int mYear=mcurrentDate.get(Calendar.YEAR);
               int mMonth=mcurrentDate.get(Calendar.MONTH);
               int mDay=mcurrentDate.get(Calendar.DAY_OF_MONTH);
               final Date curDate= new Date();
                DatePickerDialog mDatePicker=new DatePickerDialog(ViewChallan.this, new OnDateSetListener() {                  
                    public void onDateSet(DatePicker datepicker, int selectedyear, int selectedmonth, int selectedday) {
                        // TODO Auto-generated method stub                      
                        /*      Your code   to get date and time    */
                        if(mcurrentDate.before(curDate))
                        {
                            Toast.makeText(context, "Invalid Date", Toast.LENGTH_LONG).show();
                        }
                        else
                        {
                            selectedmonth= selectedmonth+1;
                            edittodate.setText(selectedyear+"-"+selectedmonth+"-"+selectedday);
                        }


                    }
                },mYear, mMonth, mDay);
                mDatePicker.setTitle("Select date"); 
             // this code below is not hiding calendar,stopping the application
                if (Build.VERSION.SDK_INT >= 11) {
                    mDatePicker.getDatePicker().setCalendarViewShown(false);
                }
                mDatePicker.show(); 

        }
        });

请建议我如何设置限制日期

提前致谢

2 个答案:

答案 0 :(得分:3)

您可以使用setMinDate(long)setMaxDate(long)方法。这两个都适用于API级别11及更高级别。由于您使用的是DatePickerDialog,因此您需要先调用DatePicker方法获取基础getDatePicker()

dpdialog.getDatePicker().setMinDate(minDate);  
dpdialog.getDatePicker().setmaxDate(maxDate);  

来源:Set Limit on the DatePickerDialog in Android?

修改:

Date today = new Date();
Calendar c = Calendar.getInstance();
c.setTime(today);
c.add( Calendar.MONTH, -6 ) // Subtract 6 months
long minDate = c.getTime().getTime() // Twice!  

来源:java.util.Date - Deleting three months from a date?

答案 1 :(得分:0)

设置DatePickerDialog的最小值和最大日期是不够的。用户可以点击年份并选择任何其他年份。

您还应该在DatePicker上设置年份范围,如下所示:

datePicker.setYearRange(calendar.get(Calendar.YEAR), calendar.get(Calendar.YEAR) + 1);