Как скрыть прошлые даты и ограничить пользователя только для выбора будущих дат
Как скрыть прошлые даты в диалоговом окне DatePicker? Я не хочу, чтобы пользователь выбирал прошлые даты.
Каким будет лучший способ? если я хочу ограничить пользователя только для выбора будущих дат!
@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;
}
}
Ответы
Ответ 1
Вы должны использовать setMinDate для минимальной даты, и вы также можете использовать setMaxDate, если вы хотите установить максимальную дату.
Вот пример кода для SetMinDate
для DatePickerDialog
.
@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;
}
Ответ 2
Вы можете использовать setMinDate (long minDate) для достижения своей цели. Док говорит:
Sets the minimal date supported by this NumberPicker in milliseconds since January 1, 1970 00:00:00 in getDefault() time zone.
Ответ 3
U может попробовать этот код в вашем случае коммутатора
DatePickerDialog dpd = new DatePickerDialog(AddTaskActivity.this,
myDateListener, year, month, day);
dpd.getDatePicker().setCalendarViewShown(false);
dpd.show();
Где myDateListener выполняет код
private DatePickerDialog.OnDateSetListener myDateListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) {
showDate(arg1, arg2 + 1, arg3);
}
};
и showDate() - это метод отображения даты в textView
Вот код для showDate()
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);
}
Надеюсь, это поможет вам:)
Ответ 4
Вы можете решить эту проблему с помощью одной строки кода:
datePicker.setMinDate(Calendar.getInstance().getTimeInMillis());
Таким образом, Date Picker будет показывать только даты с текущего времени и вперед.
Reference.
Ответ 5
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...");
}
Надеюсь, это поможет вам:)