2014-01-07 42 views
34

如何禁用將來的日期在Android的日期選取器如何禁用將來的日期在Android的日期選取器

Java代碼:

mExpireDate.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       // To show current date in the datepicker 
       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); 

       DatePickerDialog mDatePicker = new DatePickerDialog(
         EventRegisterActivity.this, new OnDateSetListener() { 
          public void onDateSet(DatePicker datepicker, 
            int selectedyear, int selectedmonth, 
            int selectedday) { 

           mcurrentDate.set(Calendar.YEAR, selectedyear); 
           mcurrentDate.set(Calendar.MONTH, selectedmonth); 
           mcurrentDate.set(Calendar.DAY_OF_MONTH, 
             selectedday); 
           SimpleDateFormat sdf = new SimpleDateFormat(
             getResources().getString(
               R.string.date_card_formate), 
             Locale.US); 

           mExpireDate.setText(sdf.format(mcurrentDate 
             .getTime())); 
          } 
         }, mYear, mMonth, mDay); 

       mDatePicker.setTitle(getResources().getString(
         R.string.alert_date_select)); 
       mDatePicker.show(); 
      } 
     }); 

plz幫助怎麼辦呢?

回答

93

DatePickerDialog獲取DatePickergetDatePicker()。與setMaxDate()設置最大日期爲當前日期:

mDatePicker.getDatePicker().setMaxDate(System.currentTimeMillis()); 

需要API級別11

+0

在何處添加這些線ondatesetListner ?? –

+0

@SaadBilal,將這些行添加到對話框id後的'onCreateDialog(int id){...}'。 – Dadani

+0

@Dadani非常感謝您的幫助 –

4

如果用戶選擇將來的日期,那麼更新日期選擇爲當前日期(今天)

你可以用下面的代碼來檢查選擇的是未來的日期或不

final Calendar cal = Calendar.getInstance(); 
datePickerDob.init(currentYear, currentMonth, currentDay, 
      new OnDateChangedListener() { 

       @Override 
       public void onDateChanged(DatePicker view, int year, 
         int monthOfYear, int dayOfMonth) { 
        Calendar selectedCal = Calendar.getInstance(); 
        selectedCal.set(year, monthOfYear, dayOfMonth); 

        long selectedMilli = selectedCal.getTimeInMillis(); 

        Date datePickerDate = new Date(selectedMilli); 
        if (datePickerDate.after(new Date())) { 

         datePickerDob.updateDate(cal.get(Calendar.YEAR), 
           cal.get(Calendar.MONTH), 
           cal.get(Calendar.DAY_OF_MONTH)); 

        } else { 


        } 

       } 
      }); 

您還可以使用的compareTo()方法

datePickerDate.compareTo(new Date()); 

將接收器與指定日期進行比較以確定相對順序。

參數 date a與之比較的日期。

返回 an int <如果此Date小於指定的Date,則返回0,如果相等則返回0,如果Date大於則返回int> 0。

12

你可以叫getDatePicker()setMaxDate(長)您DatePickerDialog今天設爲您的最大日期。您可以使用您發佈的代碼段中的相同名稱更新該功能。

注意:DatePickerDialog是我在Android文檔中從我發佈的鏈接引用的對象。

@Override 
protected Dialog onCreateDialog(int id) { 
    Calendar c = Calendar.getInstance(); 
    int cyear = c.get(Calendar.YEAR); 
    int cmonth = c.get(Calendar.MONTH); 
    int cday = c.get(Calendar.DAY_OF_MONTH); 
    switch (id) { 
     case DATE_DIALOG_ID: 
     //start changes... 
     DatePickerDialog dialog = new DatePickerDialog(this, mDateSetListener, cyear, cmonth, cday); 
     dialog.getDatePicker().setMaxDate(System.currentTimeMillis()); 
     return dialog; 
     //end changes... 
    } 
    return null; 
} 

試試這個,並給你的意見!

+3

爲此+1。因爲預期的參數是「long」,所以最好使用'.setMaxDate(System.currentTimeMillis())'而不是'.setMaxDate(new Date())'。否則,你在這裏的方法是優雅和簡單。 – Dadani

+1

v5.0中存在一個錯誤。 setMaxDate()將灰顯日期,但仍然可以選擇。 –

+0

@KetanAhir雅我也面臨同樣的問題。你能解決嗎? –

0
@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    DatePickerDialog dialog = new DatePickerDialog(getActivity(), ondateSet, year, month, day); 
    Calendar c = Calendar.getInstance(); 
    c.add(Calendar.DATE, 1); 
    Date newDate = c.getTime(); 
    dialog.getDatePicker().setMaxDate(newDate.getTime() - (newDate.getTime() % (24 * 60 * 60 * 1000))); 
    return dialog; 
} 
0
**new Way** 

ed_date.setOnClickListener(new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       Calendar mcurrentDate=Calendar.getInstance(); 
       year=mcurrentDate.get(Calendar.YEAR); 
       month=mcurrentDate.get(Calendar.MONTH); 
       day=mcurrentDate.get(Calendar.DAY_OF_MONTH); 

       final DatePickerDialog mDatePicker =new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() 
       { 
        @Override 
        public void onDateSet(DatePicker datepicker, int selectedyear, int selectedmonth, int selectedday) 
        { 
           ed_date.setText(new StringBuilder().append(year).append("-").append(month+1).append("-").append(day)); 
          int month_k=selectedmonth+1; 

        } 
       },year, month, day); 
       mDatePicker.setTitle("Please select date"); 
       // TODO Hide Future Date Here 
       mDatePicker.getDatePicker().setMaxDate(System.currentTimeMillis()); 

       // TODO Hide Past Date Here 
       // mDatePicker.getDatePicker().setMinDate(System.currentTimeMillis()); 
       mDatePicker.show(); 
      } 
     }); 
+0

mDatePicker.getDatePicker()。setMaxDate(System.currentTimeMillis()); –

+0

mDatePicker.getDatePicker()。setMinDate(System.currentTimeMillis()); –

相關問題