Android Calendar自定義日歷控件

效果預(yù)覽

image

思路:

1、RecyclerView+Calendar
2、Calendar獲取整月的天數(shù)
3、Calendar獲取上一個月和下一個月需要補(bǔ)全的天數(shù)

1、Calendar獲取整月的天數(shù)

 Calendar instance = Calendar.getInstance();

        if (indexDate != null) {
            //自定月份
            instance.setTime(indexDate.getDate());
        }

        //獲取當(dāng)前月最大的日期
        int maxDate = instance.getActualMaximum(Calendar.DATE);
        instance.set(Calendar.DAY_OF_MONTH, 1);
        //獲取當(dāng)前月所有的天數(shù)
        for (int i = 0; i < maxDate; i++, instance.add(Calendar.DATE, 1)) {
            int day = instance.get(Calendar.DAY_OF_MONTH);
            CalendarBean calendarBean = new CalendarBean();
            calendarBean.setDay(String.valueOf(day));
            calendarBean.setDate(instance.getTime());
            mDatas.add(calendarBean);
        }

2、獲取上一個月需要補(bǔ)全的天數(shù)

 private ArrayList<CalendarBean> getLastMonth(CalendarBean calendarBean) {
        //獲取當(dāng)前月第一天
        Calendar calendarFirstDay = Calendar.getInstance();
        calendarFirstDay.setTime(calendarBean.getDate());
        calendarFirstDay.set(Calendar.DAY_OF_MONTH, 1);
        //當(dāng)月第一天是星期幾
        int firstDayOfWeek = calendarFirstDay.get(Calendar.DAY_OF_WEEK);
        if (firstDayOfWeek != 1) {
            /**
             *   firstDayOfWeek =1時,就是星期日,當(dāng)前月第一天已經(jīng)處于星期日,不需要添加上一個月補(bǔ)充天數(shù)
             */
            //需要補(bǔ)全的天數(shù),當(dāng)needAdd為負(fù)數(shù)時候,說明是星期日,需要補(bǔ)6天
            int needAdd = firstDayOfWeek - 1;

            ArrayList<CalendarBean> lastMonth = new ArrayList<>();
            for (int i = 0; i < needAdd; i++) {
                CalendarBean dayBean = new CalendarBean();
                //0:當(dāng)月,1:上月,2:下一個月
                dayBean.setDayType(1);
                dayBean.setWeekOfDay(getWeekString(i));
                //取出上一個月需要補(bǔ)全的天數(shù)
                //calendarFirstDay.set(Calendar.DAY_OF_MONTH, 0 - i);
                calendarFirstDay.add(Calendar.DATE, -1);
                //上一個月的天數(shù)
                int lastMonthDay = calendarFirstDay.get(Calendar.DAY_OF_MONTH);
                dayBean.setDay(String.valueOf(lastMonthDay));
                dayBean.setDate(dayBean.getDate());
                lastMonth.add(0, dayBean);
            }

            return lastMonth;

        }
        return new ArrayList<>();
    }

3、獲取下一個月需要補(bǔ)全的天數(shù)

 private ArrayList<CalendarBean> getNextMonth(CalendarBean calendarBean) {

        //獲取當(dāng)前月最后一天
        Calendar calendarLastDay = Calendar.getInstance();
        calendarLastDay.setTime(calendarBean.getDate());
        calendarLastDay.add(Calendar.MONTH, 1);
        calendarLastDay.set(Calendar.DAY_OF_MONTH, 0);
        //獲取當(dāng)前月最后一天是星期幾
        int nextDayOfWeek = calendarLastDay.get(Calendar.DAY_OF_WEEK);
        if (nextDayOfWeek != 7) {
            /**
             *   nextDayOfWeek =7時,就是星期六,當(dāng)前月最后一天已經(jīng)處于星期六,不需要添加上一個月補(bǔ)充天數(shù)
             */
            int needAdd = 7 - nextDayOfWeek;

            ArrayList<CalendarBean> nextMonth = new ArrayList<>();
            for (int i = 1; i <= needAdd; i++) {
                CalendarBean dayBean = new CalendarBean();
                //0:當(dāng)月,1:上月,2:下一個月
                dayBean.setDayType(2);
                dayBean.setWeekOfDay(getWeekString(i));
                //取出上一個月需要補(bǔ)全的天數(shù)
                calendarLastDay.set(Calendar.DAY_OF_MONTH, i);
                //上一個月的天數(shù)
                int lastMonthDay = calendarLastDay.get(Calendar.DAY_OF_MONTH);
                dayBean.setDay(String.valueOf(lastMonthDay));
                dayBean.setDate(dayBean.getDate());
                nextMonth.add(dayBean);
            }
            return nextMonth;
        }
        return new ArrayList<>();
    }

Demo地址
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容