android - 在 Android 中设置 DatePickerDialog 的限制?

标签 android android-datepicker datepickerdialog

如何限制 DatePickerDialog 选择过去 2-12 年或当前日期 0-2 年的日期?

我在 Activity 中有 DatePickerDialog,用于获取 child 和婴儿的出生日期。 child 年龄为(2-12 岁),婴儿年龄为(0-2 岁)。如果我通过 1,那么年龄限制应该是(2-12 岁),如果我通过 2,年龄限制应该是(0-2 岁)。

我可以做些什么来在我的日历中获得这个功能?

我的日历代码是:

date = new DatePickerDialog.OnDateSetListener() {

            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear,
                    int dayOfMonth) {
                // TODO Auto-generated method stub
                myCalendar.set(Calendar.YEAR, year);
                myCalendar.set(Calendar.MONTH, monthOfYear);
                myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                String myFormat = "dd/MM/yy"; //In which you need put here
                SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
                dateofBirth.setText(sdf.format(myCalendar.getTime()));
            }
        };

dateofBirth.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                showDialog(DATE_DIALOG_ID);

            }
        });

public Dialog onCreateDialog(int id) {
    final Calendar now = Calendar.getInstance();

    switch (id) {
    case DATE_DIALOG_ID:
        // set date picker as current date
        DatePickerDialog _date =   new DatePickerDialog(this, date,myCalendar
                .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                myCalendar.get(Calendar.DAY_OF_MONTH)){
            @Override

            public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth){   

                if (year > now.get(Calendar.YEAR))

                    view.updateDate(myCalendar
                            .get(Calendar.YEAR), myCalendar
                            .get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH));

                if (monthOfYear > now.get(Calendar.MONTH) && year == now.get(Calendar.YEAR))
                    view.updateDate(myCalendar
                            .get(Calendar.YEAR), myCalendar
                            .get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH));

                if (dayOfMonth > now.get(Calendar.DAY_OF_MONTH) && year == now.get(Calendar.YEAR) && 
                        monthOfYear == now.get(Calendar.MONTH))
                    view.updateDate(myCalendar
                            .get(Calendar.YEAR), myCalendar
                            .get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH));
            }

        };

        return _date;
    }
    return null;
}

最佳答案

所有其他答案似乎都相当复杂,所以我只想说明显而易见的:您可以从 DatePickerDialog 获取底层 DatePicker (只需调用 getDatePicker() ) 并使用以下方法设置其界限:

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

细心的读者会注意到,上述 setter 直到 API 级别 11 才可用。如果您只针对该(或更新的)平台,那么您就可以开始了。如果您还想支持 Gingerbread 设备(Android 2.3/API 级别 9+),您可以使用 backported version of DatePicker 代替。

关于android - 在 Android 中设置 DatePickerDialog 的限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18272306/

相关文章:

android - Android 密码管理器应用程序如何工作?

android - 删除自定义选项卡上的额外格式

android - 何时在 DialogFragment 中使用 DatePickerDialog 而不是 DatePicker?

java - 如何禁用最近 3 天和 future 的 DateTimePicker android

java - 如何在游戏中实现拖放?

android - 如何在VideoView中旋转视频

Android DatePickerDialog - 因 IllegalArgumentException 而失败

android - 如何设置 Android MaterialCalendars 各种组件的样式

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