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

9

我正在使用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;
}

2
https://dev59.com/9mgv5IYBdhLWcg3wHdJ_ - keshav
对于 API < 11 中的 set maxDate(),请尝试使用此链接:https://dev59.com/WmQn5IYBdhLWcg3wiXqd#32943731 - Kishan Vaghela
你能解释一下最小日期和最大日期是什么吗? - Arpit Patel
3个回答

12
您可以通过从DatePickerDialog中调用getDatePicker()来获取基础DatePicker,并使用以下方法设置其范围: 其中参数是自1970年1月1日00:00:00以来默认时区中的毫秒数。当然,您仍需要计算这些值,但使用Calendar类应该很容易做到:只需传递当前日期并加上或减去x年即可。

5
但我相信这是支持 API 11 及以上版本的...这就是为什么我提到我使用最低 SDK 版本为 10,而且在我的代码结尾处,你可以看到我已经注释了下面这段://datePicker.getDatePicker().setMinDate(d); //datePicker.getDatePicker().setMaxDate(1546210800000L); - denza

1
我通过以下方式解决了这个问题。
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());    

希望它能帮助你。

1
在iOS的默认DatePicker中,它提供了设置日期选择器的最小和最大日期的功能。在Android应用程序开发中也有同样的功能,但只适用于Android API 11及以上的设备。这意味着在Android API 11以下的设备上,最小和最大日期范围的功能将不起作用。
为了解决这种问题并支持在所有Android设备上使用此功能,包括Android API 11以下的设备,我们必须扩展“DatePickerDialog”类以提供设置可选的最小和最大日期范围的功能。请查看下面给出的链接- 如何在Android应用程序中创建具有最大和最小日期范围的自定义DatePicker控件 有关实现说明,请查看下面的链接- 解释我们应用程序中自定义DatePicker的实现

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接