android实现上班打卡记录日历查看功能

发布时间:2021-07-05

概述

android实现上班打卡记录日历查看功能

详细


日历实现查看打卡记录功能:


实现功能:

1、支持农历、节气、常用节假日

2、日期范围设置,默认支持的最大日期范围[1900.1~2049.12]

3、禁用日期范围设置

4、初始化选中单个或多个日期

5、单选、多选操作

6、跳转到指定日期

7、替换农历为指定文字

8、通过自定义属性定制日期外观,以及简单的日期item布局配置

9、新增查看打卡记录功能;(在原来基础上新增了查看打卡记录功能,包含打卡正常和打卡异常)


基本用法注意:日历使用了viewpager进行了每月的详情展示,viewpager会预加载相邻页面(calendarView.setOffscreenPageLimit(0)),我是每月的打卡记录请求接口获取,viewpager这种预加载会造成打卡记录的圆点的渲染失败,所以我就自定义了viewpager和PagerAdapter,主要是为了禁止预加载,以及禁用了viewpager的侧向滑动功能,只能通过顶部选择年月后去请求接口,然后渲染打卡记录的圆点



2020083115125186.jpg20200708115933270.jpg




使用方法:

设置一个boolean判断是否是日历初始化 private boolean isCalendarInit = false;

HashMap<String, String> clockStatusMap = new HashMap<>();//日历中需要渲染的日期集合

clockStatusMap .put("2020.7.11", "true");   2020年7月11日  true-打卡正常,灰色点 ,默认就是正常,可不填,7月不能用07月

calendarView.setClockInStatus(clockStatusMap);//接口获取当月的打卡记录集合,处理数据后放入日历
 
if (!isCalendarInit) {//第一次初始化日历,一定要等把打卡记录放到日历集合后进行初始化,不然会造成渲染失败
    isCalendarInit = true;
    calendarView
            .setStartEndDate("2016.1", "2028.12")
            .setDisableStartEndDate("2016.1.1", "2028.12.31")
            .setInitDate(cDate[0] + "." + cDate[1])
            .setSingleDate(cDate[0] + "." + cDate[1] + "." + cDate[2])
            .init();
} else {//已经完成初始化后,选择年月,日历去切换年月并进行渲染
 
    calendarView.toDestDate(Integer.parseInt(year), Integer.parseInt(month), 0);
}


详细的使用方法见下面:

Step 1. 添加JitPack仓库 在当前项目等根目录下的 build.gradle 文件中添加如下内容:

allprojects {
    repositories {
        ...
        maven { url "https://jitpack.io" }
    }
}


Step 2. 添加项目依赖(在源码基础上进行了扩展,需要直接把源码放到本地添加依赖

下载项目到本地:

20200708143323975.png

添加依赖到你的项目: 


20200708121247902.png


Step 3. 在布局文件中添加WeekView、CalendarView


<com.othershe.calendarview.weiget.WeekView
        android:layout_width="match_parent"
        android:layout_height="35dp" />
        
<com.othershe.calendarview.weiget.CalendarView
        android:id="@+id/calendar"
        android:layout_width="match_parent"
        android:layout_height="220dp" />

Step 4. 相关初始化


CalendarView calendarView = (CalendarView) findViewById(R.id.calendar);
//日历init,年月日之间用点号隔开
calendarView
        .setStartEndDate("2010.7", "2018.12")
        .setInitDate("2017.11")
        .setSingleDate("2017.12.12")
        .init();
 
//月份切换回调
calendarView.setOnPagerChangeListener(new OnPagerChangeListener() {
            @Override
            public void onPagerChanged(int[] date) {
                
            }
        });
        
//单选回调
calendarView.setOnItemClickListener(new OnMonthItemClickListener() {
            @Override
            public void onMonthItemClick(View view, DateBean date) {
                
            }
        });


CalendarView相关方法介绍

新增方法 setClockInStatus(HashMap<String, String>   map)

{设置日历的打卡状态 例如:

HashMap<String, String> map = new HashMap<>();
map.put("2020.7.11", "true");   2020年7月11日  true-打卡正常,灰色点 ,默认就是正常,可不填
map.put("2020.7.6", "false");   2020年7月6日 false-打卡异常,红色点 ,默认就是正常,可不填
//map中没有增加的日期,默认没有打卡
calendarView.setClockInStatus(map);


方法名	描述
setInitDate(String date)	设置日历的初始显示年月
setStartEndDate(String startDate, String endDate)	设置日历开始、结束年月
setDisableStartEndDate(String startDate, String endDate)	设置日历的禁用日期范围(小于startDate、大于endDate禁用)
setSpecifyMap(HashMap<String, String> map)	将显示农历的区域替换成指定文字
setSingleDate(String date)	设置单选时初始选中的日期(不设置则不默认选中)
getSingleDate()	得到单选时选中的日期
setMultiDate(List dates)	设置多选时默认选中的日期集合
getMultiDate()	得到多选时选中的全部日期
toSpecifyDate(int year, int month, int day)	单选时跳转到指定年月日
setOnCalendarViewAdapter(int layoutId, CalendarViewAdapter adapter)	设置自定义日期item样式
init()	日期初始化(以上属性配置完后调用)
setOnPagerChangeListener(OnPagerChangeListener listener)	设置月份切换回调
setOnSingleChooseListener(OnSingleChooseListener listener)	设置单选回调
setOnMultiChooseListener(OnMultiChooseListener listener)	设置多选回调
today()	单选时跳转到今天
nextMonth()	跳转到下个月
lastMonth()	跳转到上个月
nextYear()	跳转到下一年的当前月
lastYear()	跳转到上一年的当前月
toStart()	跳转到日历的开始年月
toEnd()	跳转到日历的结束年月
CalendarUtil.getCurrentDate()	获得当前日期(今天)


CalendarView的自定义属性

namespace:xmlns:calendarview="http://schemas.android.com/apk/res-auto"


属性名 格式 描述 默认值

choose_type enum 设置单选(single)、多选(multi) single

show_lunar boolean 是否显示农历 true

show_last_next boolean 是否在MonthView显示上月和下月日期 true

show_holiday boolean 是否显示节假日 true

show_term boolean 是否显示节气 true

switch_choose boolean 单选时切换月份,是否选中上次的日期 true

solar_color color 阳历日期的颜色  

solar_size integer 阳历的日期尺寸 14

lunar_color color 农历的日期颜色  

lunar_size integer 农历的日期尺寸 8

holiday_color color 节假日、节气的颜色  

choose_color color 选中的日期颜色  

day_bg reference 选中的日期背景(图片)  

WeekView的自定义属性


WeekView的自定义属性

namespace:xmlns:weekview="http://schemas.android.com/apk/res-auto"

属性名格式描述默认值
week_strstring周的表示形式,用点隔开(例如:日.一.二.三.四.五.六)
week_colorcolor周的颜色
week_sizeinteger周的尺寸12






本实例支付的费用只是购买源码的费用,如有疑问欢迎在文末留言交流,如需作者在线代码指导、定制等,在作者开启付费服务后,可以点击“购买服务”进行实时联系,请知悉,谢谢
手机上随时阅读、收藏该文章 ?请扫下方二维码