如何限制 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/