限制Android日期选择器的日期范围

12

我正在使用Android的datePicker来根据用户选择的日期显示图像。我需要将可选日期限制在特定日期范围内,例如2010年1月1日至2010年12月31日。这似乎很简单,但我找不到如何限制这些日期的答案。

有人知道如何限制Android DatePicker的日期吗?


1
我成功地通过编程设置了DatePicker View的最小和最大可选择日期,并设置了当前(默认)日期:https://dev59.com/Omw15IYBdhLWcg3wv-VM#7961268 - user678511
5个回答

8
您可以直接设置以下内容:
dateDialog.getDatePicker().setMaxDate(new Date().getTime());

and

dateDialog.getDatePicker().setMinDate(new Date().getTime());

在这里,dateDialog是一个。
new DatePickerDialog()

对于MaxDate和MinDate,要设置的参数类型为长整型(long)


1
可能已经太晚回答了,但是对于所有Android版本来说,设置DatePickerDialogminmax日期非常容易。简单地说,您需要根据Android版本返回DatePickerDialog即可。请保留HTML标签。
protected Dialog onCreateDialog(int id)
{
    switch ( id )
    {
        case DATE_DIALOG_ID:
            DatePickerDialog dialog = null;
            if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB )
            {
                dialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener()
                {
                    @Override
                    public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDate)
                    {
                        mTextView.setText(selectedDate + "/" + selectedMonth + 1 + "/" + selectedYear);
                    }
                }, year, month - 1, date);
                Calendar currentDate = Calendar.getInstance();
                dialog.getDatePicker().setMaxDate(currentDate.getTimeInMillis());
                //If you need you can set min date too
            }
            else
            {
                dialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener()
                {
                    @Override
                    public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDate)
                    {
                        mTextView.setText(selectedDate + "/" + selectedMonth + 1 + "/" + selectedYear);
                    }
                }, year, month - 1, date)
                {
                    @Override
                    public void onDateChanged(DatePicker view, int year, int month, int day)
                    {
                        if ( year <= maxYear && month + 1 <= maxMonth && date <= maxDate ) //meets your criteria
                        {
                            view.updateDate(year, month, date); //update the date picker to selected date
                        }
                        else
                        {
                            view.updateDate(maxYear, maxMonth - 1, maxDate); // or you update the date picker to previously selected date
                        }
                    }
                };
            }
            return dialog;
    }
    return null;
}

0

我猜你得自己实现你自己的DatePicker。这背后的逻辑是:“只有少数开发者会限制DatePicker,所以他们必须自己实现功能。”


1
对于XML,还有一些额外的属性可用,例如endYear和beginYear,您可以将其用于边界。 - Pentium10
我在哪里可以找到关于endYear和beginYear的信息,听起来这很不错。我害怕要自己实现,希望这个XML属性能够奏效。 - brass
endYear和beginYear边界只适用于小部件,而不是我正在使用的实际datePicker对话框。我将寻找如何实现小部件,除非有人可以提供有关如何将边界应用于对话框的信息。 - brass

0

为什么你不应该像自定义选项一样设计新的DatePicker布局。你可以使用Spinners和Forloops来完成。


0

您可以通过输入一行简单的代码来实现这个功能

mDatePicker.getDatePicker().setMinDate(System.currentTimeMillis());
        mcurrentDate.add(Calendar.MONTH,6);
        mDatePicker.getDatePicker().setMaxDate(mcurrentDate.getTimeInMillis());

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