适用于 android 的自定义材料日期范围选择器

时间:2021-03-09 04:58:18

标签: java xml android-layout datepicker material-components-android

date range picker with customzing

对于此视图,我从 github Prolific Interactive ( material-calendarview) 中获取了参考或示例概念 所以我自定义了日期选择器,选择范围选择突出显示下方的可绘制对象,您将看到日期选择器 i have customized datepicker 。所以我使用了范围选择方法来过时以突出显示,我的观点与实际的 ui 设计不同,所以告诉我知道要解决这个问题,在下面我将发布我的代码

 @Override
    public void onRangeSelected(@NonNull MaterialCalendarView widget, @NonNull List<CalendarDay> dates) {

        Log.d(TAG, "onRangeSelected: ");

        dateList.clear();

       for(int i=0; i<dates.size(); i++){
           Log.d(TAG, "onRangeSelected: year "+dates.get(i).getYear());
           Log.d(TAG, "onRangeSelected:day "+dates.get(i).getDay());
           Log.d(TAG, "onRangeSelected:month "+dates.get(i).getMonth());

           String output=String.valueOf(dates.get(i).getYear())+"-"+String.valueOf(dates.get(i).getMonth())+"-"+
                       String.valueOf(dates.get(i).getDay());

           Log.d(TAG, "onRangeSelected: finaldate  "+output);
           dateList.add(output);
           datesCenter.clear();
           datesLeft.clear();
           datesRight.clear();
       }

       Log.d(TAG, "onRangeSelected: final datelist  "+String.valueOf( dateList));


        List<LocalDate> localDateList = new ArrayList<>();

        for (String string : dateList) {
            LocalDate calendar = getLocalDate(string);
            if (calendar != null) {
                localDateList.add(calendar);
                Log.d(TAG, "onRangeSelected: localdatesize"+localDateList.size());
            }
        }
        size=localDateList.size();

        for (LocalDate localDate : localDateList) {
            boolean right = false;
            boolean left = false;
            for (LocalDate day1 : localDateList) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    if (localDate.isEqual(day1.plusDays(1))) {

                        left = true;
                    }
                }
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    if (day1.isEqual(localDate.plusDays(1))) {
                        right = true;
                    }
                }
            }


            if (left && right) {
                datesCenter.add(CalendarDay.from(localDate));
            } else if (left) {
                datesLeft.add(CalendarDay.from(localDate));
            } else if (right) {
                datesRight.add(CalendarDay.from(localDate));
            }

        }

        setDecor(datesCenter, R.drawable.ic_green);
        setDecor(datesLeft, R.drawable.ic_ellipse_30);
        setDecor(datesRight, R.drawable.ic_ellipse_30);
    }


    void setDecor(List<CalendarDay> calendarDayList, int drawable) {

        widget.addDecorators(new EventDecorator(MainActivity.this
                , drawable
                , calendarDayList));
    }

0 个答案:

没有答案