2015-06-25 74 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,你的最后日期将可以点击

相关问题