2014-10-19 69 views
0

我在我的活动使用DatePickerDialog,设置日期限制的Android

我要设置用户限制日期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(); 

     } 
     }); 

请建议我如何能在日期设定限制

在此先感谢

+1

见http://stackoverflow.com/a/18353944/2274724 – 2014-10-19 10:03:54

+0

或者http://stackoverflow.com/questions/16749361/如何设置最大日期datepicker对话框在Android – prettyvoid 2014-10-19 10:06:24

回答

3

您在您的处置的setMinDate(long)setMaxDate(long)方法。这两个都将在API级别11和更高级别上运行。由于您使用的是DatePickerDialog,因此您需要先调用getDatePicker()方法来获得底层的DatePicker

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?

+0

工作正常,但如何定义最短日期(最短日期是在当前日期的6个月之前) – 2014-10-19 10:31:39

+0

请参阅编辑。如果您想要就SO的未来问题获得答案,请考虑接受答案。 – 2014-10-19 10:44:53

+0

Thanks @Little Child – 2014-10-19 11:39:38

0

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

您还应该设置年份范围上的DatePicker这样的:

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