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

标签 android android-datepicker

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

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

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");

            }
        });

日期选择器 fragment 类是这样的:

 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 网站上也没有任何帮助。

So please help me , How can I put limit of seven days only

更新

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

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

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

最佳答案

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

关于android - 如何在日期选择器对话框中设置日期限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31049830/

相关文章:

java - 如何禁用日期选择器中的所有昨天的日期

android - 如何使用 Google 日历用于我的 Android 应用程序的日期选择器?

android - 如何调用 Timer 作为方法?

android - 如何在我的 Galaxy S3 Android 设备上的 Chrome 中执行检查元素?

java - 根据设备配置格式化日期,但强制 YYYY 而不是 YY

android - 如何在 DatePickerDialog Android 中禁用今天日期之前的日期?

android - 您需要在将应用上传到 google play 时向您的 APK 添加图标

android - 在Android小部件中以编程方式设置文本样式的方法?

java - 日期选择器对话框在 fragment 中不起作用

java - Calendar.getInstance() 在 Android Studio 中给出错误