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

sta*_*een 7 android android-datepicker

我想在日期上设置限制,以便用户不能选择更多的日期,例如,如果今天是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");

            }
        });
Run Code Online (Sandbox Code Playgroud)

和日期选择器片段类如下所示:

 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
        }
    }
Run Code Online (Sandbox Code Playgroud)

直到那时它工作正常,但我不知道如何限制日期和其余的月份和年份应该是非选择能够.我已经看到很多像这样的链接,但我不明白我怎么能这样做,而且在android网站上没有任何帮助.

所以请帮助我,我怎样才能限制七天

更新

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

pickerDialog.getDatePicker().setMaxDate(new Date().getTime());
Run Code Online (Sandbox Code Playgroud)

它将当前日期设置为最大值,但是如何在其中添加7天,因为它是Date对象?请帮忙

Kar*_*eek 18

您有自己的方法setMinDate(long)setMaxDate(long)方法.这两个都适用于API级别11及更高级别.由于您使用的是a DatePickerDialog,因此需要首先通过调用getDatePicker()方法获取基础DatePicker .

dpdialog.getDatePicker().setMinDate(minDate);  
dpdialog.getDatePicker().setmaxDate(maxDate);  
Run Code Online (Sandbox Code Playgroud)

来源:Android中的DatePickerDialog设置限制?

您可以使用,计算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!  
Run Code Online (Sandbox Code Playgroud)

更新 :

替换以下行

return new DatePickerDialog(getActivity(), this, year, month, day);
Run Code Online (Sandbox Code Playgroud)

 // 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;
Run Code Online (Sandbox Code Playgroud)


dgn*_*can 9

在某些情况下,当您使用没有小时和分钟的日期设置最长日期时,您将无法选择您设置的最长日期.例如

 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());
Run Code Online (Sandbox Code Playgroud)

使用上面的代码块,您无法单击maxDate.

但是如果你加上小时和分钟就喜欢;

            maxDate.set(Calendar.HOUR, 23);
            maxDate.set(Calendar.MINUTE, 59);
Run Code Online (Sandbox Code Playgroud)

到您的maxDate,您的上一个日期将是可点击的