如何在日期选择器对话框中设置日期限制

Posted

技术标签:

【中文标题】如何在日期选择器对话框中设置日期限制【英文标题】:How to set the limit on date in Date picker dialog 【发布时间】:2015-09-12 00:42:21 【问题描述】:

我想限制日期,这样用户就不能选择更多的日期,例如,如果今天是 1 月 1 日,那么用户应该不能选择超过 7 个日期,我的意思是他不能选择 1 月 9 日.我也希望他不要选择月份和年份。所以我限制在一周内完成他的任务。

到目前为止,我所做的是显示日期选择器片段并在其中设置当前日期。我的主要活动中的代码是这样的:

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 天的限制

更新

通过您的回复,我知道如何在日历中设置最大日期,所以我想在当前日期前 7 天设置最大日期,我仍然没有得到它。到目前为止我读到的方法是:

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

它将当前日期设置为最大值,但是由于它是 Date 对象,我怎样才能在其中添加 7 天?请帮忙

【问题讨论】:

你可以在这里浏览完整的线程:***.com/questions/18272306/… 查看***.com/a/45671497/6478047 我正在使用日期选择器。它工作正常。但是在打开选择器时,我需要将默认年份显示为十年前。但是我用户滚动需要显示到当前年份。它是否有任何方法可以在小部件中显示默认日期,并且在向上或向下滚动时它需要像往常一样显示年份。 【参考方案1】:

您可以使用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;

【讨论】:

我之前看过这个帖子,但我该如何实现 @stacyqueen 更新了我的答案,看看 那么如何在 Max date 中设置 7 天的限制?最小日期肯定是治疗日期? 您的解决方案对我帮助很大,但其中有一个问题 @stacyqueen 有什么问题?【参考方案2】:

在某些情况下,当您使用不带小时和分钟的日期设置最大日期时,您将无法选择您设置的最大日期。 比如

 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,您的最后一个日期将是可点击的

【讨论】:

【参考方案3】:

通过使用

setMinDatesetMaxDate

MinDate

MaxDate

【讨论】:

您能否详细说明一下。我可以在哪里使用它以及以哪种格式使用【参考方案4】:

试试这个

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;

【讨论】:

以上是关于如何在日期选择器对话框中设置日期限制的主要内容,如果未能解决你的问题,请参考以下文章

如何在 android 的 datepicker 对话框中设置最大日期?

如何在物化日期选择器中设置日期

如何在android的日期选择器中设置特定日期

如何在日期选择器中设置 3 个月的日期范围?

在日期选择器中设置最大日期时可以选择未来日期

在android中设置时间和日期到日期选择器和时间选择器