Material Calendar View 学习记录(二)

Material Calendar View 学习记录(二)

github link: material-calendarview;html

学习记录一中简单翻译了该开源项目的README.md文档。接下来开始阅读源码。java

代码浏览

源码中分红三个部分:日期的格式化,自定义的span效果,以及日历控件的实现。其中最重要也最复杂的部分就是日历控件的实现。我先从简单的看起,即日期格式化。android

format包

format包中有八个java文件,其中有三个接口,五个实现类。git

三个接口:github

  • DayFormatter 经过自定义的CalendarDay对象,获得一个日期的字符串标签。其实现类是DateFormatDayFormatter。
  • TitleFormatter 经过自定义的CalendarDay对象,获得一个包含年月的字符串标签,做为MaterialCalendarView的标签。其实现类为DateFormatTitleFormatter和MonthArrayTitleFormatter。
  • WeekDayFormatter 将一个日期中Calendar.DAY_OF_YEAR对应的值转换成一个字符串标签。其实现类是ArrayWeekDayFormatter。

这三个接口都只有一个方法,有的提供了一个公有的默认实现类。其功能就是将日期的数值转换成本地化的可读字符串。在这里我能够想到的是,由于使用了接口,咱们能够很灵活的替换其实现类,而不用更改日历控件中的代码,实现定制化的需求。学习

spans包

spans包中只有一个类DotSpan,实现了在文字下方画一个小圆点的效果。这是一个示例,咱们能够模仿它来实现本身想要的效果。好比,若是想在日期的下方用一行小字显示农历日期,或者在右上角显示法定假日,用span是很方便的一种实现方式。spa

materialcalendarview包

这个包中有16个Java文件,是此开源控件主要的代码所在。其中,组合成最终控件的四个最重要的类是DayView,WeekDayView,MonthView和MaterialCalendarView。翻译

  1. DayView 继承自CheckedTextView。之因此用CheckedTextView而不是TextView,是为了使用android.R.attr.state_checked状态,在日期被选中时显示不一样的背景图片。
  2. WeekDayView 继承自TextView,用于在日历的第一排显示星期的标签。
  3. MonthView 继承自ViewGroup,它包含7个WeekDayView和42个DayView,即一个7*7的矩形,其中每个矩形称为一个tile。
  4. MaterialCalendarView 继承自ViewGroup,包含上方的title和下方的ViewPager。这个控件的宽度若是不能被7整除,那么它会自动缩小其内容,并居中。
相关文章
相关标签/搜索