首页 > 解决方案 > 适用于 android 的自定义 materila 日期范围选择器

问题描述

具有自定义功能的日期范围选择器

对于此视图,我从 github Prolific Interactive (material-calendarview) 中获取了参考或示例概念,因此我自定义了日期选择器,其范围选择为使用下面的绘图突出显示,您将看到日期选择器我已经定制了日期选择器。所以我使用了范围选择方法来突出显示日期,我的观点与实际的 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));
    }

标签: javaxmlandroid-layoutdatepickermaterial-components-android

解决方案


推荐阅读