如何在 Android DatePicker 中设置最小和最大日期?

Posted

技术标签:

【中文标题】如何在 Android DatePicker 中设置最小和最大日期?【英文标题】:How do you set min and max dates in an Android DatePicker? 【发布时间】:2014-01-15 18:58:14 【问题描述】:

我正在使用 android 的默认日期选择器,我支持的最小 SDK 为 10,我想设置日期选择器的最小和最大日期。

这是我的 MainActivity 类中 onCreate 方法之后的内容:

private void registerButtonListeners() 
    Calendar.setOnClickListener(new View.OnClickListener() 
       
        @Override
        public void onClick(View v) 
            showDialog(DATE_PICKER_DIALOG);
        
    );


@Override
protected Dialog onCreateDialog(int id)

    switch(id)
    
    case DATE_PICKER_DIALOG: return showDatePicker();

    
    return super.onCreateDialog(id);

private DatePickerDialog showDatePicker()

        DatePickerDialog datePicker= new DatePickerDialog(MainActivity.this,android.R.style.Theme_Holo_Dialog_NoActionBar_MinWidth,new DatePickerDialog.OnDateSetListener() 
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear,
                    int dayOfMonth) 
                mCalendar.set(Calendar.YEAR,year);
                mCalendar.set(Calendar.MONTH,monthOfYear);
                mCalendar.set(Calendar.DAY_OF_MONTH,dayOfMonth);
                updateDateText();

            
        ,mCalendar.get(Calendar.YEAR),mCalendar.get(Calendar.MONTH),mCalendar.get(Calendar.DAY_OF_MONTH));


        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
        
            long d=1356994800000L;
            //datePicker.getDatePicker().setMinDate(d);
            //datePicker.getDatePicker().setMaxDate(1546210800000L);

        
        return datePicker;

【问题讨论】:

***.com/questions/10836679/… for set maxDate() in api ***.com/a/32943731/3758898 你的最小日期和最大日期应该向我解释什么?? 【参考方案1】:

您可以从 DatePickerDialog 获取底层 DatePicker(只需调用 getDatePicker())并使用以下方法设置其边界:

setMinDate(long minDate) setMaxDate(long maxDate)

其中参数是自默认时区 1970 年 1 月 1 日 00:00:00 以来的通常毫秒数。当然,您仍然需要计算这些值,但这对于 Calendar 类应该是微不足道的:只需传递当前日期并从中添加或减去 x 年..

【讨论】:

但我相信这是支持 api 11 及更高版本....这就是为什么我提到我使用 min sdk 10 并且在我的代码末尾你可以看到我评论的内容 // datePicker.getDatePicker().setMinDate(d); //datePicker.getDatePicker().setMaxDate(1546210800000L);【参考方案2】:

ios默认的DatePicker中提供了设置最小值的功能。和最大。日期选择器的日期。 Android 应用程序开发中也可以使用相同的功能,但它适用于 Android API 11 及更高版本。这意味着最小和最大日期范围的功能在 Android API 11 以下的设备中不起作用。

为了克服此类问题并在所有 Android 设备(包括 Android API 11 以下的设备)中支持此功能,我们必须扩展“DatePickerDialog”类以提供设置最小和最大日期范围的功能选择。检查下面给出的链接-

How to make a Custom DatePicker control with maximum and minimum date range in Android application

有关实现的解释,请查看以下链接-

Explain the implementation of Custom DatePicker in our application

【讨论】:

【参考方案3】:

我通过关注解决了这个问题

DatePickerDialog datePickerDialog;
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);
    datePickerDialog = new DatePickerDialog(getActivity(), this, year, month, day);
    datePickerDialog.getDatePicker().setMinDate(c.getTimeInMillis());    

希望对你有帮助

【讨论】:

以上是关于如何在 Android DatePicker 中设置最小和最大日期?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 DatePicker 中设置当前日期?

在新的 Material DatePicker 中设置标题颜色

如何使用 Formik 在 react-datepicker 中设置初始日期?

如何使用 Jquery 在 DatePicker 中设置昨天的日期

如何从默认的白色更改 DatePicker 对话框的背景颜色?

在 react-hook-form 中设置 DatePicker 的值(来自 antd)