【发布时间】:2011-01-07 11:25:41
【问题描述】:
我需要在日期选择器控件中禁用过去的日期。这个控件在一个对话框中打开,我想禁用过去的日期,以便在选择过去的日期时抛出错误。
【问题讨论】:
标签: android
我需要在日期选择器控件中禁用过去的日期。这个控件在一个对话框中打开,我想禁用过去的日期,以便在选择过去的日期时抛出错误。
【问题讨论】:
标签: android
我想您正在使用 DatePickerDialog 并且您必须传递给构造函数的 OnDateSetListener 不符合您的需求,因为您必须在实际设置日期之前 抛出错误.
在这种情况下,您可以扩展 DatePickerDialog 并自己实现 OnDateChanged,每次日期更改时都会调用它,并且您将 DatePicker 以及新的年、月和日值作为参数,因此您可以检查如果该日期已过并且在这种情况下抛出错误(使用 Toast 或其他)并调用 DatePicker.updateDate() 设置正确的值(以便 DatePicker 始终处于一致状态)。
另外,您可以调用DatePicker.init(year, monthOfYear, dayOfMonth, onDateChangedListener);,然后您可以传递onDateChangedListener 实现,而无需扩展 DatePickerDialog
【讨论】:
您可以手动检查日期.. 并限制用户输入无效日期:
检查以下代码sn-p:
if((futureDate.getDate() == currentDate1.getDate() && futureDate.getMonth()== currentDate1.getMonth() && futureDate.getYear() == currentDate1.getYear()))
{
if(futureDate.after(currentDate1))
{
// Accept Date
}
else
{
// Alert user Date is Invalid
}
}
else
{
// Alert user Date is Invalid
}
【讨论】:
如果您正在运行 API 11 或更高版本,请在 DatePicker 上使用 setMinDate() 方法。这会隐藏指定日期之前的所有日期。
【讨论】:
希望这会有所帮助。
public void openDateDialog(View view) { 最终日历 c = Calendar.getInstance(); 最终 int dayOfMonth = c.get(Calendar.DAY_OF_MONTH); final int monthOfYear = c.get(Calendar.MONTH); final int year = c.get(Calendar.YEAR);
new MyDatePickerDialog(view.getContext(), null, year, monthOfYear, dayOfMonth).show();;
}
class MyDatePickerDialog extends DatePickerDialog {
public MyDatePickerDialog(Context context, OnDateSetListener callBack,
int year, int monthOfYear, int dayOfMonth) {
super(context, callBack, year, monthOfYear, dayOfMonth);
this.context = context;
}
private Context context;
@Override
public void onDateChanged(DatePicker view, int year, int month, int day) {
// TODO Auto-generated method stub
super.onDateChanged(view, year, month, day);
Calendar dareSelected = Calendar.getInstance();
dareSelected.set(year, month, day);
Calendar currentDate = Calendar.getInstance();
int a = dareSelected.compareTo(currentDate);
if(a<0){
Toast.makeText(context, "Invalid Date", Toast.LENGTH_SHORT).show();
}else{
setDate(year,month,day);
}
}
}
private void setDate(int year, int monthOfYear, int dayOfMonth){
tvText.setText(new StringBuilder().append(pad(dayOfMonth))
.append("-").append(pad(monthOfYear + 1)).append("-")
.append(pad(year)));
}
private static String pad(int c) {
if (c >= 10)
return String.valueOf(c);
else
return "0" + String.valueOf(c);
}
【讨论】: