Disable specific dates of day in Android date picker

前端 未结 5 1523
日久生厌
日久生厌 2020-12-06 05:06

I\'m using the datePicker and I can disable last days of today and later days after 30 days by the following code:

DatePickerDialog datePicker = new DatePick         


        
相关标签:
5条回答
  • 2020-12-06 05:42

    That is not possible with the android datepicker and you need to create a custom picker for yourself. See MaterialDateTimePicker

    To disable Sundays you have to pass the array like this

          GregorianCalendar g1=new GregorianCalendar();
          g1.add(Calendar.DATE, 1);
          GregorianCalendar gc = new GregorianCalendar();
          gc.add(Calendar.DAY_OF_MONTH, 30);
           List<Calendar> dayslist= new LinkedList<Calendar>();
    Calendar[] daysArray;
    Calendar cAux = Calendar.getInstance();
    while ( cAux.getTimeInMillis() <= gc.getTimeInMillis()) {
        if (cAux.get(Calendar.DAY_OF_WEEK) != 1) {
            Calendar c = Calendar.getInstance();
            c.setTimeInMillis(cAux.getTimeInMillis());
            dayslist.add(c);
        }
        cAux.setTimeInMillis(cAux.getTimeInMillis() + (24*60*60*1000));
    }
    daysArray = new Calendar[dayslist.size()];
    for (int i = 0; i<daysArray.length;i++)
    {
        daysArray[i]=dayslist.get(i);
    }
    datePickerDialog.setSelectableDays(daysArray);
    
    0 讨论(0)
  • 2020-12-06 05:50

    Visit https://stackoverflow.com/a/44692231/6631959 Best method and easy to understand... if u are searching for how to disable a specified date it is better. not a looping procedure. giving any exact date and disabling it.

    The code is HEre::

    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;
            }
    
    0 讨论(0)
  • 2020-12-06 05:53

    Use custom DatePickerDialog

    add this in build.gradle

    compile 'com.wdullaer:materialdatetimepicker:3.5.1'

    implement

    DatePickerDialog.OnDateSetListener to your class

    and import

    import com.wdullaer.materialdatetimepicker.date.DatePickerDialog; instead of 'import android.app.DatePickerDialog;'

    and add this method

     private void showDatePicker() { 
    
        Calendar calendar = Calendar.getInstance();
    
        DatePickerDialog dpd = DatePickerDialog.newInstance(
                this,
                calendar.get(Calendar.YEAR),
                calendar.get(Calendar.MONTH),
                calendar.get(Calendar.DAY_OF_MONTH)
        );
        dpd.show(getActivity().getFragmentManager(), "DatePickerDialog");
    
        SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
        String a = "07-03-2018"; // example
    
        java.util.Date date = null;
    
        try {
            date = sdf.parse(a);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    
        calendar = dateToCalendar(date);
        System.out.println(calendar.getTime());
    
        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;
        }
    
    
    
    
    @Override
    public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) {
    
        String date = dayOfMonth+"/"+(monthOfYear+1)+"/"+year;
        textview.setText(date);
    
    }
    

    call showDatePicker().

    for multiple days

    Change this

         String[] holidays = {"07-03-2018","05-03-2018","10-03-2018"};
    
        java.util.Date date = null;
    
        for (int i = 0;i < holidays.length; i++) {
    
            try {
                date = sdf.parse(holidays[i]);
            } catch (ParseException e) {
                e.printStackTrace();
            }
    
            calendar = dateToCalendar(date);
            System.out.println(calendar.getTime());
    
            List<Calendar> dates = new ArrayList<>();
            dates.add(calendar);
            Calendar[] disabledDays1 = dates.toArray(new Calendar[dates.size()]);
            dpd.setDisabledDays(disabledDays1);
        }
    
    0 讨论(0)
  • 2020-12-06 05:58

    Try Android Material Date and Timepicker

    Source Link

    Disabled Sundays and Saturdays.

    You can also disable any specific date using setDisabledDays() method

                //Disable all SUNDAYS and SATURDAYS between Min and Max Dates
                for (Calendar loopdate = min_date_c; min_date_c.before(max_date_c); min_date_c.add(Calendar.DATE, 1), loopdate = min_date_c) {
                    int dayOfWeek = loopdate.get(Calendar.DAY_OF_WEEK);
                    if (dayOfWeek == Calendar.SUNDAY || dayOfWeek == Calendar.SATURDAY) {
                        Calendar[] disabledDays =  new Calendar[1];
                        disabledDays[0] = loopdate;
                        datePickerDialog.setDisabledDays(disabledDays);
                    }
                }
    
    0 讨论(0)
  • 2020-12-06 06:01

    You can use this library Material Date Time Picker, here you can set an option to show specific dates, For Example:

    datePicker.setSelectableDays(Calendar[] days)
    

    And pass array of Calendar as an parameter which contains all the selectable date.

    0 讨论(0)
提交回复
热议问题