Android 如何隐藏过去日期并限制用户仅选择未来日期
如何在DatePicker对话框中隐藏过去的日期?我不想让用户选择过去的日期 最好的办法是什么?如果我想限制用户只选择未来的日期Android 如何隐藏过去日期并限制用户仅选择未来日期,android,android-datepicker,Android,Android Datepicker,如何在DatePicker对话框中隐藏过去的日期?我不想让用户选择过去的日期 最好的办法是什么?如果我想限制用户只选择未来的日期 @Override public void onCreate(Bundle savedInstanceState) { ................................................. editDate.setOnClickListener(new View.OnClickLis
@Override
public void onCreate(Bundle savedInstanceState)
{
.................................................
editDate.setOnClickListener(new View.OnClickListener() {
@SuppressWarnings("deprecation")
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
showDialog(DIALOG_DATE);
}
});
}
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_DATE:
return new DatePickerDialog(this, new OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
dateTime.set(year, monthOfYear, dayOfMonth);
editDate.setText(dateFormatter
.format(dateTime.getTime()));
}
}, dateTime.get(Calendar.YEAR),
dateTime.get(Calendar.MONTH),
dateTime.get(Calendar.DAY_OF_MONTH));
}
return null;
}
}
你可以用它来实现你的目标。医生说:
Sets the minimal date supported by this NumberPicker in milliseconds since January 1, 1970 00:00:00 in getDefault() time zone.
您必须为最小日期使用,如果要设置最大日期,也可以使用
下面是DatePickerDialog
的SetMinDate
示例代码
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_DATE:
DatePickerDialog mDatePickerDialog = new DatePickerDialog(this, new OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
dateTime.set(year, monthOfYear, dayOfMonth);
editDate.setText(dateFormatter.format(dateTime.getTime()));
}
}, dateTime.get(Calendar.YEAR), dateTime.get(Calendar.MONTH), dateTime.get(Calendar.DAY_OF_MONTH));
Calendar mCalendarMinimum = Calendar.getInstance();
mCalendarMinimum.add(Calendar.HOUR, -1);
mDatePickerDialog.getDatePicker().setMinDate(mCalendarMinimum.getTimeInMillis());
return mDatePickerDialog;
}
return null;
}
你可以在你的开关盒里试试这个代码
DatePickerDialog dpd = new DatePickerDialog(AddTaskActivity.this,
myDateListener, year, month, day);
dpd.getDatePicker().setCalendarViewShown(false);
dpd.show();
其中myDateListener是以下代码
私有DatePickerDialog.OnDateSetListener myDateListener=新建DatePickerDialog.OnDateSetListener(){
showDate()是在textView中显示日期的方法
以下是showDate()的代码
希望它能帮助您:)this.calendar=new gregoriacalendar();
this.datePicker=(datePicker)findviewbyd(R.id.xxxxx);
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.HONEYCOMB){
//(选择器是日期选择器)
this.datePicker.setMinDate(this.calendar.getTimeInMillis());
}否则{
final int minYear=this.calendar.get(calendar.YEAR);
final int minMonth=this.calendar.get(calendar.MONTH);
final int minDay=this.calendar.get(calendar.DAY/u月);
this.datePicker.init(minYear、minMonth、minDay、,
新OnDateChangedListener(){
公共无效onDateChanged(日期选择器视图,整数年,
整数月,整数日){
Calendar newDate=Calendar.getInstance();
newDate.set(年、月、日);
如果(日历日期后(新日期)){
view.init(minYear、minMonth、minDay、this);
}
}
});
w(标记“API级别<11,因此不限制日期范围…”);
}
希望它能帮助您:)您只需一行代码即可解决此问题:
datePicker.setMinDate(Calendar.getInstance().getTimeInMillis());
这样,日期选择器将只显示当前时间和未来的日期
.为什么要赏金?你不喜欢setMinDate方法吗?看看这个方法。
setMinDate()
应该足够了。你可以使用setMinDate(新日期())
,最短日期是今天
public void showDate(int year, int month, int day) {
String day1 = String.valueOf(day);
String month1 = String.valueOf(month);
String s2 = day1 + "/" + month1 + "/" + year;
Log.e("date", s2);
Cal.setText(s2);
}
this.calendar = new GregorianCalendar();
this.datePicker = (DatePicker) findViewById(R.id.xxxxx);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
// (picker is a DatePicker)
this.datePicker.setMinDate(this.calendar.getTimeInMillis());
} else {
final int minYear = this.calendar.get(Calendar.YEAR);
final int minMonth = this.calendar.get(Calendar.MONTH);
final int minDay = this.calendar.get(Calendar.DAY_OF_MONTH);
this.datePicker.init(minYear, minMonth, minDay,
new OnDateChangedListener() {
public void onDateChanged(DatePicker view, int year,
int month, int day) {
Calendar newDate = Calendar.getInstance();
newDate.set(year, month, day);
if (calendar.after(newDate)) {
view.init(minYear, minMonth, minDay, this);
}
}
});
Log.w(TAG, "API Level < 11 so not restricting date range...");
}
datePicker.setMinDate(Calendar.getInstance().getTimeInMillis());