'How to disable certain dates in the Android Date Picker dialog?

I am using default Android DatePickerDialog which contains android.widget.DatePicker.

Does anybody know how to disable or make certain dates unselectable?

I know DatePicker allows to setMinDate() and setMaxDate() but it doesn't allow to disable specific dates in the middle.

e.g. on this picture would like to disable date 18, 26, etc:

enter image description here



Solution 1:[1]

That is not a built in behavior - you would have to use a custom date picker.

Solution 2:[2]

I got a method by using custom datepicker. First we need to take the date as a string and then convert it into date object and then the date is converted to calendar object. At last by using setDisabledDays(calenderobj). We can disable it. The code is as follows.

 SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
                String a = "26-07-2017";
                java.util.Date date = null;
                try {
                    date = sdf.parse(a);
                    MainActivity obj = new MainActivity();
                    calendar = obj.dateToCalendar(date);
                    System.out.println(calendar.getTime());
                } catch (ParseException e) {
                    e.printStackTrace();
                }

                List<Calendar> dates = new ArrayList<>();
                dates.add(calendar);
                Calendar[] disabledDays1 = dates.toArray(new Calendar[dates.size()]);
                dpd.setDisabledDays(disabledDays1);
                }


    private Calendar dateToCalendar(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar;
    }

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 ianhanniballake
Solution 2 akash bs