Android Datepicker Without Sundays
I am using an datepicker to choose a specific date. The datepicker should not allow to pick sundays. Till now i am detecting sundays after choice and show a message but it would be
Solution 1:
I solved this requirements with creating a custom dialog containing a custom xml layout with datepicker.
I created the following example for everyone, who needs a datepicker dialog with special needs like no sundays, no dates earlier a specific date to be offered to choose:
Create custom datepicker:
publicvoidshowDatePicker() {
finalStringdateFormatStr="yyyyMMdd";
finalStringdateSearchFormatStr="yyyy-MM-dd";
finalStringdateFormatStrGUI="dd.MM.yyyy";
finalStringdateFormatStrGUIDatepickerDialog="EEEE, dd.MM.yyyy";
finalStringminDateAvailable="01.01.2005";
// InitializiationLayoutInflaterinflater= (LayoutInflater) getLayoutInflater();
final AlertDialog.BuilderdialogBuilder=newAlertDialog.Builder(this);
ViewcustomView= inflater.inflate(R.layout.activity_dateselect_dialog, null);
dialogBuilder.setView(customView);
finalDatePickerdatePicker= (DatePicker) customView.findViewById(R.id.activity_thumbnail_dateselect_dialog_datepicker);
finalTextViewdateTextView= (TextView) customView.findViewById(R.id.activity_thumbnail_dateselect_dialog_dateview);
finalSimpleDateFormatdateTextViewFormatter=newSimpleDateFormat(Constants.dateFormatStrGUIDatepickerDialog, Locale.GERMANY);
// Minimum dateSimpleDateFormatformatter=newSimpleDateFormat(Constants.dateFormatStrGUI, Locale.GERMANY);
CalendarminDate= Calendar.getInstance();
try {
minDate.setTime(formatter.parse(Constants.minDateAvailable));
} catch (ParseException e) {
e.printStackTrace();
}
datePicker.setMinDate(minDate.getTimeInMillis());
// View settings
dialogBuilder.setTitle("Choose date");
CalendarchoosenDate= Calendar.getInstance();
intyear= choosenDate.get(Calendar.YEAR);
intmonth= choosenDate.get(Calendar.MONTH);
intday= choosenDate.get(Calendar.DAY_OF_MONTH);
try {
DatechoosenDateFromUI= formatter.parse(newspaperDatePickerButton.getText().toString());
choosenDate.setTime(choosenDateFromUI);
year = choosenDate.get(Calendar.YEAR);
month = choosenDate.get(Calendar.MONTH);
day = choosenDate.get(Calendar.DAY_OF_MONTH);
} catch (Exception e) {
e.printStackTrace();
}
CalendardateToDisplay= Calendar.getInstance();
dateToDisplay.set(year, month, day);
dateTextView.setText(dateTextViewFormatter.format(dateToDisplay.getTime()));
// Buttons
dialogBuilder.setNegativeButton("today", newDialogInterface.OnClickListener() {
@OverridepublicvoidonClick(DialogInterface dialog, int which) {
newspaperDatePickerButton.setText(R.string.date_latest_identifier);
newspaperDate = getString(R.string.date_latest_identifier);
controller.loadNewspaper(newspaperDate, model.getSubscriptions().get(newspaperEditionPosition), true);
dialog.dismiss();
}
});
dialogBuilder.setPositiveButton("Apply", newDialogInterface.OnClickListener() {
@OverridepublicvoidonClick(DialogInterface dialog, int which) {
SimpleDateFormatformatter=newSimpleDateFormat(Constants.dateFormatStrGUI, Locale.GERMANY);
Calendarnow= Calendar.getInstance();
Calendarchoosen= Calendar.getInstance();
choosen.set(datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth());
if (now.compareTo(choosen) == 0) {
newspaperDate = getString(R.string.date_latest_identifier);
newspaperDatePickerButton.setText(newspaperDate);
} else {
newspaperDate = formatter.format(choosen.getTime());
newspaperDatePickerButton.setText(newspaperDate);
}
controller.loadNewspaper(newspaperDate, model.getSubscriptions().get(newspaperEditionPosition), false);
dialog.dismiss();
}
});
finalAlertDialogdialog= dialogBuilder.create();
// Datepicker
datePicker.init(year, month, day, newDatePicker.OnDateChangedListener() {
publicvoidonDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
CalendarchoosenDate= Calendar.getInstance();
choosenDate.set(year, monthOfYear, dayOfMonth);
Calendarnow= Calendar.getInstance();
dateTextView.setText(dateTextViewFormatter.format(choosenDate.getTime()));
if (choosenDate.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY || now.compareTo(choosenDate) < 0) {
dateTextView.setTextColor(Color.parseColor("#ff0000"));
((Button) dialog.getButton(AlertDialog.BUTTON_POSITIVE)).setEnabled(false);
} else {
dateTextView.setTextColor(Color.parseColor("#000000"));
((Button) dialog.getButton(AlertDialog.BUTTON_POSITIVE)).setEnabled(true);
}
}
});
// Finish
dialog.show();
}
Layout
<TextView
android:id="@+id/activity_thumbnail_dateselect_dialog_dateview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_margin="12dp"
android:text=""
android:layout_gravity="center"/>
<DatePicker
android:id="@+id/activity_thumbnail_dateselect_dialog_datepicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:calendarViewShown="false"/>
Post a Comment for "Android Datepicker Without Sundays"