Android DatePickerDialog上的最大日期
我需要在我正在使用的DatePickerDialog上设置一个最大年份,但我找不到任何机制来实现这一点。文档提到getDatePicker()是DatePickerDialog的公共方法。所以,我想,也许,这可以用来获取日期选择器,然后我可以设置最大日期,但是当我尝试获取日期选择器时,我得到了“methodundefined”错误 这就是我试图在onCreateDialog中获取日期选择器的方式Android DatePickerDialog上的最大日期,android,android-datepicker,Android,Android Datepicker,我需要在我正在使用的DatePickerDialog上设置一个最大年份,但我找不到任何机制来实现这一点。文档提到getDatePicker()是DatePickerDialog的公共方法。所以,我想,也许,这可以用来获取日期选择器,然后我可以设置最大日期,但是当我尝试获取日期选择器时,我得到了“methodundefined”错误 这就是我试图在onCreateDialog中获取日期选择器的方式 DatePickerDialog d = new DatePickerDialog(this, de
DatePickerDialog d = new DatePickerDialog(this, dep_dateListener, mYear,
mMonth, mDay);
DatePicker dp = d.getDatePicker();
dp.setMaxDate(maxDate);
return d;
有没有关于如何做到这一点的建议
感谢您,getDatePicker()方法在API级别11中可用 创建DatePickerDialog的子类 重写已更改的方法 见
import java.text.simpleDataFormat;
导入java.util.Calendar;
导入java.util.Date;
导入android.app.DatePickerDialog;
导入android.content.Context;
导入android.widget.DatePicker;
公共类MyDatePickerDialog扩展了DatePickerDialog{
非公开期末考试;
私人最后一个月;
minDay私人终审法院;
私人机构;
私人每月;
私人int maxDay;
私人最终日历;
专用最终SimpleDataFormat格式化程序;
公共MyDatePickerDialog(上下文上下文、OnDateSetListener回调、int年、int月、int月){
超级(上下文、回调、年、月、月);
mCalendar=Calendar.getInstance();
//建立心智
minYear=常量。minYear;
minMonth=常量。minMonth;
minDay=常数。minDay;
mCalendar.setTime(新日期());
//设置maxdate
mCalendar.add(Calendar.YEAR,Constant.maxBirthdayYearSinceNow);
maxYear=mCalendar.get(Calendar.YEAR);
maxMonth=mCalendar.get(Calendar.MONTH);
maxDay=mCalendar.get(Calendar.DATE);
//设置初始日期
mCalendar.set(日历年、年份);
mCalendar.set(日历月、月、年);
mCalendar.set(Calendar.DAY/u/u月,dayOfMonth);
//设置日期显示格式
格式化程序=新的SimpleDataFormat(“MM/dd/yyyy”);
setTitle(formatter.format(mCalendar.getTime());
}
@凌驾
公共无效onDateChanged(日期选择器视图、整数年、整数月、整数天){
布尔beforeMinDate=false;
布尔afterMaxDate=false;
如果(年最大日){
afterMaxDate=true;
}
}
}
}
//需要将无效日期设置为mindate或maxdate
如果(在MaxDate之前| |之后){
如果(事先){
年=年;
月=月;
白天=明日;
}
否则{
年份=最大年份;
月份=最大月份;
天=最大天;
}
view.updateDate(年、月、日);
}
//在视图标题中显示
mCalendar.set(日历年、年份);
mCalendar.set(Calendar.MONTH,MONTH);
mCalendar.set(Calendar.DAY\u OF_MONTH,DAY);
setTitle(formatter.format(mCalendar.getTime());
}
}
setMaxDate()
仅对新API有用,但如果您希望应用程序与早期版本配合使用,则必须为日期制作自己的比较器
例如,我只是使用
Calendar.getInstance()
和date.before(date)
或date.before(date)
方法获取本地日期。在(date)之后,您可以为日期选择器添加限制,这是monodroid中更好的实现:
public DateTime MaxDate { get; set; }
public DateTime MinDate { get; set; }
public override void OnDateChanged(DatePicker view, int year, int month, int day)
{
var error = false;
if (year < MinDate.Year)
{
error = true;
year++;
}
else if (year == MinDate.Year)
{
if (month < MinDate.Month - 1)
{
error = true;
month++;
}
else if (month == MinDate.Month - 1)
{
if (day < MinDate.Day)
{
error = true;
day++;
}
}
}
if (!error)
{
if (year > MaxDate.Year)
{
error = true;
year--;
}
else if (year == MaxDate.Year)
{
if (month > MaxDate.Month - 1)
{
error = true;
month--;
}
else if (month == MaxDate.Month - 1)
{
if (day > MaxDate.Day)
{
error = true;
day--;
}
}
}
}
if (error)
{
view.UpdateDate(year, month, day);
}
}
public DateTime MaxDate{get;set;}
公共日期时间MinDate{get;set;}
公共覆盖无效OnDateChanged(日期选择器视图、整数年、整数月、整数天)
{
var错误=错误;
如果(年份<起始年份)
{
错误=真;
年份++;
}
否则,如果(年份==MinDate.year)
{
如果(月最大日期年)
{
错误=真;
年--;
}
else if(年份==MaxDate.year)
{
如果(月>最大日期月-1)
{
错误=真;
月--;
}
else if(月==MaxDate.month-1)
{
如果(天>最大日期.天)
{
错误=真;
天——;
}
}
}
}
如果(错误)
{
view.UpdateDate(年、月、日);
}
}
这就是问题所在。谢谢。DatePicker\setMaxDate(…)
public DateTime MaxDate { get; set; }
public DateTime MinDate { get; set; }
public override void OnDateChanged(DatePicker view, int year, int month, int day)
{
var error = false;
if (year < MinDate.Year)
{
error = true;
year++;
}
else if (year == MinDate.Year)
{
if (month < MinDate.Month - 1)
{
error = true;
month++;
}
else if (month == MinDate.Month - 1)
{
if (day < MinDate.Day)
{
error = true;
day++;
}
}
}
if (!error)
{
if (year > MaxDate.Year)
{
error = true;
year--;
}
else if (year == MaxDate.Year)
{
if (month > MaxDate.Month - 1)
{
error = true;
month--;
}
else if (month == MaxDate.Month - 1)
{
if (day > MaxDate.Day)
{
error = true;
day--;
}
}
}
}
if (error)
{
view.UpdateDate(year, month, day);
}
}