2015-06-25 77 views
4

我想把日期的限制,以便用戶不能選擇更多的日期,例如如果今天是1月1日,那麼用戶應該不能夠選擇更多然後7日,我的意思是他不能選擇1月9日。我也希望他不要選擇月份和年份。所以我在限制一個星期內完成他的任務。如何設置Date日期選擇器對話框中的日期限制

到目前爲止,我所做的是顯示日期選取器片段並在其中設置當前日期。在我的主要活動的代碼是這樣的:

etSelectDate.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       DialogFragment datePickerFragment = new DatePickerFragment() { 
        @Override 
        public void onDateSet(DatePicker view, int year, int month, int day) { 
         Log.d("Date Change", "onDateSet"); 
         Calendar c = Calendar.getInstance(); 
         c.set(year, month, day); 
         DateFormat df = DateFormat.getDateInstance(); 
         etSelectDate.setText(df.format(c.getTime())); 
         //nextField.requestFocus(); //moves the focus to something else after dialog is closed 

        } 
       }; 
       datePickerFragment.show(MainActivity.this.getSupportFragmentManager(), "datePicker"); 

      } 
     }); 

和日期選擇器片段類是這樣的:

public static class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener{ 

     @Override 
     public Dialog onCreateDialog(Bundle savedInstanceState) { 
      // Use the current date as the default date in the picker 
      final Calendar c = Calendar.getInstance(); 
      int year = c.get(Calendar.YEAR); 
      int month = c.get(Calendar.MONTH); 
      int day = c.get(Calendar.DAY_OF_MONTH); 

      // Create a new instance of DatePickerDialog and return it 
      return new DatePickerDialog(getActivity(), this, year, month, day); 
     } 

     @Override 
     public void onDateSet(DatePicker view, int year, int month, int day) { 
      //blah 
     } 
    } 

直到那時它工作正常,但我不知道如何把極限在日期和其他月份和年份應該是非選擇能夠。我看到很多鏈接,如this,但我不明白我該怎麼做,也沒有什麼有用的android網站。

所以,請幫助我,我怎樣才能把七天僅

限制更新

通過您的答覆,我知道如何設置壓延最大日期,所以當我想要在當前日期前7天設置最大日期,我仍然沒有得到它。我至今讀的方法是:

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

它設置爲當前日期爲最大,但我如何添加提前7天它,因爲它是Date對象?請幫助

+0

你可以通過完整的線程在這裏:HTTP://stackoverflow.com/questions/18272306/set-limit-on-the-datepickerdialog -in-android – strike

+0

檢查此https://stackoverflow.com/a/45671497/6478047 – Redman

回答

13

你有setMinDate(long)setMaxDate(long)方法在您的處置。這兩個都將在API級別11和更高級別上運行。由於您使用的是DatePickerDialog,因此您需要先調用getDatePicker()方法來獲取基礎DatePicker。

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

來源:Set Limit on the DatePickerDialog in Android?

您可以通過使用計算的minDate,

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! 

更新時間:

替換以下行

return new DatePickerDialog(getActivity(), this, year, month, day); 

// Create a new instance of DatePickerDialog and return it 
    DatePickerDialog pickerDialog = new DatePickerDialog(getActivity(), this, year, month, day); 
    pickerDialog.getDatePicker().setMaxDate(maxDate); 
    pickerDialog.getDatePicker().setMinDate(minDate); 
    return pickerDialog; 
+0

我已經看到過這個線程較早,但我怎麼能在我的情況下執行 –

+0

@stacyqueen更新我的答案,看看 – Kartheek

+0

@stacyqueen它的工作? – Kartheek

1

使用

setMinDatesetMaxDate

MinDate

MaxDate

+0

請你詳細說明一下。在哪裏我可以使用此和以哪種格式 –

0

試試這個

DatePickerDialog dpDialog = new DatePickerDialog(this, pDateSetListener, pYear, pMonth, pDay); 
DatePicker datePicker = dpDialog.getDatePicker(); 

Calendar calendar = Calendar.getInstance();//get the current day 
datePicker.setMaxDate(calendar.getTimeInMillis());//set the current day as the max date or put yore date in miliseconds. 
datePicker.setMinDate(calendar.getTimeInMillis());//set the current day as the min date or put your date in mili seconds format 
return dpDialog; 
8

在某些情況下,當你設置最大日期有沒有小時和分鐘的日期,你將無法選擇你設置的最大日期。 例如

Calendar maxDate = Calendar.getInstance(); 
      maxDate.set(Calendar.DAY_OF_MONTH, day + 5); 
      maxDate.set(Calendar.MONTH, month); 
      maxDate.set(Calendar.YEAR, year); 

datePickerDialog.getDatePicker().setMaxDate(maxDate.getTimeInMillis()); 

通過上面的代碼塊,你不能點擊您的maxDate。

但是,如果你添加小時和分鐘喜歡;

  maxDate.set(Calendar.HOUR, 23); 
      maxDate.set(Calendar.MINUTE, 59); 

您的maxDate,你的最後日期將可以點擊

相關問題