[TOC](Android 日历自定义)
前言
公司最近有这么一个需求,如下图
分析
1.日历需要能自定义文字
2.根据日期优先级,文字的展示为优先级高的
实现
选择库 NCalendar
由于开发周期短,决定选择一个较为全面的日历库上自定义需求。
Github地址
https://github.com/yannecer/NCalendar
Calendar Apdater
/**
* 获取日历item的View
*/
public abstract View getCalendarItemView(Context context);
/**
* 绑定今天的数据
*
* @param calendarItemView getCalendarItemView()方法获取的 View
* @param localDate 今天的日期
* @param totalCheckedDateList 所有选中日期的集合,
* 单选模式中,集合中最多只有一个元素,
* 多选模式中,可以有多个元素
*/
public abstract void onBindToadyView(View calendarItemView, LocalDate localDate, List<LocalDate> totalCheckedDateList);
/**
* 绑定当前月或周的日期
*
* @param calendarItemView getCalendarItemView()方法获取的 View
* @param localDate 月日历-> 当前页面月份中的每个日期(内部是循环处理)
* 周日历-> 当前页面一周中的每个日期(内部是循环处理)
* @param totalCheckedDateList 所有选中日期的集合,
* 单选模式中,集合中最多只有一个元素,
* 多选模式中,可以有多个元素
*/
public abstract void onBindCurrentMonthOrWeekView(View calendarItemView, LocalDate localDate, List<LocalDate> totalCheckedDateList);
/**
* 绑定上下月的数据 周日历可不用实现
*
* @param calendarItemView getCalendarItemView()方法获取的 View
* @param localDate 月日历-> 当前页面上一月、下一月中的每个日期(内部是循环处理)
* 周日里-> 周日历无需实现此方法
* @param totalCheckedDateList 所有选中日期的集合,
* 单选模式中,集合中最多只有一个元素,
* 多选模式中,可以有多个元素
*/
public abstract void onBindLastOrNextMonthView(View calendarItemView, LocalDate localDate, List<LocalDate> totalCheckedDateList);
这三个方法相当于
1.日历基本视图
2.当日视图
3.当月视图
4.上下月视图
逻辑实现
if (localDate.getDayOfWeek() == 6 || localDate.getDayOfWeek() == 7){
tv_double.setText("1.1");
}
if (holidays.contains(localDate)){
tv_double.setText("1.3");
}
if (specaldays.contains(localDate)){
tv_double.setText("1.4");
}
效果
NCalendar 5.0.1 git上只有Android x 版本,修改Support版本
NCalendar Support版本下载地址