2010-03-26 189 views
11

我在android中使用datePicker來顯示基於用戶選擇日期的圖像。我需要將上述日期限制在某些日期,例如2010年1月1日至2010年12月31日。簡單,因爲我認爲但沒有我在哪裏可以找到如何限制這些日期的答案。設置android datepicker日期限制

有誰知道如何限制日期爲Android的DatePicker

+1

我設法編程設定的最小,最大可選的日期,及還設置了DatePicker的查看當前(默認)日期:http://stackoverflow.com/問題/ 6421874 /如何獲取date-set-in-date-date-date-set-in-date-date-date-set-in-android/7961268#7961268 – 2011-11-02 14:39:06

回答

0

我想你必須實現自己的DatePicker。這背後的邏輯是:「只有少數開發者會限制DatePicker,所以他們必須實現自己的功能。」

+1

另外對於XML還有一些額外的屬性可用,如endYear beginYear,你可以使用它界限。 – Pentium10 2010-03-26 20:12:58

+0

我在哪裏可以找到結束年份的信息開始年份,聽起來像那樣會很好地工作。 我害怕答案實現我自己的,希望這個XML屬性將泛出。 – matt 2010-03-26 20:50:14

+0

endYear和beginYear界限只能用於widget而不是我正在使用的實際的datePicker對話框。我會看看如何實現這個小部件,除非任何人都可以提供有關如何將對話框應用到對話框的信息 – matt 2010-03-30 20:02:59

1

回答可能太遲了,但很容易將minmax的日期設置爲DatePickerDialog適用於所有Android版本。只要你需要返回DatePickerDialog基於Android版本

protected Dialog onCreateDialog(int id) 
{ 
    switch (id) 
    { 
     case DATE_DIALOG_ID: 
      DatePickerDialog dialog = null; 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) 
      { 
       dialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() 
       { 
        @Override 
        public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDate) 
        { 
         mTextView.setText(selectedDate + "/" + selectedMonth + 1 + "/" + selectedYear); 
        } 
       }, year, month - 1, date); 
       Calendar currentDate = Calendar.getInstance(); 
       dialog.getDatePicker().setMaxDate(currentDate.getTimeInMillis()); 
       //If you need you can set min date too 
      } 
      else 
      { 
       dialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() 
       { 
        @Override 
        public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDate) 
        { 
         mTextView.setText(selectedDate + "/" + selectedMonth + 1 + "/" + selectedYear); 
        } 
       }, year, month - 1, date) 
       { 
        @Override 
        public void onDateChanged(DatePicker view, int year, int month, int day) 
        { 
         if (year <= maxYear && month + 1 <= maxMonth && date <= maxDate) //meets your criteria 
         { 
          view.updateDate(year, month, date); //update the date picker to selected date 
         } 
         else 
         { 
          view.updateDate(maxYear, maxMonth - 1, maxDate); // or you update the date picker to previously selected date 
         } 
        } 
       }; 
      } 
      return dialog; 
    } 
    return null; 
} 
0

爲什麼你不應該customoption設計新的佈局類似的DatePicker。你可以使用Spinners和Forloops。

7

您可以只設置:

dateDialog.getDatePicker().setMaxDate(new Date().getTime()); 

dateDialog.getDatePicker().setMinDate(new Date().getTime()); 

其中dateDialog是

new DatePickerDialog() 

和參數類型爲MAXDATE設置和爲MinDate是long

+0

只適用於比Android 11更晚的版本。 – 2015-04-04 04:52:47

+0

for api <11試試這個http://stackoverflow.com /一個/3758898分之32943731 – 2015-10-05 07:57:20

0

U可以通過鍵入簡單的線條實現這一

mDatePicker.getDatePicker().setMinDate(System.currentTimeMillis()); 
     mcurrentDate.add(Calendar.MONTH,6); 
     mDatePicker.getDatePicker().setMaxDate(mcurrentDate.getTimeInMillis());