【问题标题】:How do you set min and max dates in an Android DatePicker?如何在 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;
}

【问题讨论】:

标签: android android-datepicker


【解决方案1】:

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

其中参数是自默认时区 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());    
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-13
      相关资源
      最近更新 更多