2014-10-19 66 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);