Material Calendar View 学习记录(二)
Material Calendar View 学习记录(二)
github link: material-calendarview;
在学习记录一中简单翻译了该开源项目的README.md文档。接下来开始阅读源码。
代码浏览
源码中分成三个部分:日期的格式化,自定义的span效果,以及日历控件的实现。其中最重要也最复杂的部分就是日历控件的实现。我先从简单的看起,即日期格式化。
format包
format包中有八个java文件,其中有三个接口,五个实现类。
三个接口:
- DayFormatter 通过自定义的CalendarDay对象,得到一个日期的字符串标签。其实现类是DateFormatDayFormatter。
- TitleFormatter 通过自定义的CalendarDay对象,得到一个包含年月的字符串标签,作为MaterialCalendarView的标签。其实现类为DateFormatTitleFormatter和MonthArrayTitleFormatter。
- WeekDayFormatter 将一个日期中Calendar.DAY_OF_YEAR对应的值转换成一个字符串标签。其实现类是ArrayWeekDayFormatter。
这三个接口都只有一个方法,有的提供了一个公有的默认实现类。其功能就是将日期的数值转换成本地化的可读字符串。在这里我可以想到的是,因为使用了接口,我们可以很灵活的替换其实现类,而不用更改日历控件中的代码,实现定制化的需求。
spans包
spans包中只有一个类DotSpan,实现了在文字下方画一个小圆点的效果。这是一个示例,我们可以模仿它来实现自己想要的效果。比如,如果想在日期的下方用一行小字显示农历日期,或者在右上角显示法定假日,用span是很方便的一种实现方式。
materialcalendarview包
这个包中有16个Java文件,是此开源控件主要的代码所在。其中,组合成最终控件的四个最重要的类是DayView,WeekDayView,MonthView和MaterialCalendarView。
- DayView 继承自CheckedTextView。之所以用CheckedTextView而不是TextView,是为了使用android.R.attr.state_checked状态,在日期被选中时显示不同的背景图片。
- WeekDayView 继承自TextView,用于在日历的第一排显示星期的标签。
- MonthView 继承自ViewGroup,它包含7个WeekDayView和42个DayView,即一个7*7的矩形,其中每一个矩形称为一个tile。
- MaterialCalendarView 继承自ViewGroup,包含上方的title和下方的ViewPager。这个控件的宽度如果不能被7整除,那么它会自动缩小其内容,并居中。
Material Calendar View 学习记录(二)的更多相关文章
- 开源项目Material Calendar View 学习记录 (一)
开源项目Material Calendar View 学习记录 Github: https://github.com/prolificinteractive/material-calendarview ...
- Spring Boot学习记录(二)--thymeleaf模板 - CSDN博客
==他的博客应该不错,没有细看 Spring Boot学习记录(二)--thymeleaf模板 - CSDN博客 http://blog.csdn.net/u012706811/article/det ...
- JavaScript学习记录二
title: JavaScript学习记录二 toc: true date: 2018-09-13 10:14:53 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...
- 2.VUE前端框架学习记录二
VUE前端框架学习记录二:Vue核心基础2(完结)文字信息没办法描述清楚,主要看编码实战里面,有附带有一个完整可用的Html页面,有需要的同学到脑图里面自取.脑图地址http://naotu.baid ...
- Spring Boot学习记录(二)–thymeleaf模板
自从来公司后都没用过jsp当界面渲染了,因为前后端分离不是很好,反而模板引擎用的比较多,thymeleaf最大的优势后缀为html,就是只需要浏览器就可以展现页面了,还有就是thymeleaf可以很好 ...
- SpringBoot学习记录(二)
一. SpringBoot日志框架 SpringBoot:底层是Spring框架,Spring框架默认是用JCL(commons-logging): SpringBoot选用SLF4j和logback ...
- 【java并发编程艺术学习】(四)第二章 java并发机制的底层实现原理 学习记录(二) synchronized
章节介绍 本章节主要学习 Java SE 1.6 中为了减少获得锁 和 释放锁 时带来的性能消耗 而引入的偏向锁 和 轻量级锁,以及锁的存储结构 和 升级过程. synchronized实现同步的基础 ...
- 下页小希学MVC5+EF6.2 学习记录二
目的:1 学习mvc+ef 2 写下日记也是对自己的督促 从前端的UI开始 MVC分离的比较好,开发顺序没有特别要求,先开发哪一部分都可以,这次我们主要讲解前端UI的部分. ASP.NET MVC抛 ...
- Spring学习记录(二)---容器和bean属性配置
下载spring包,在eclipse搭建spring环境. 这步我在eclipse中无法导入包,看网上的: http://sishuok.(和谐)com/forum/blogPost/list/242 ...
随机推荐
- Android --------- 压缩图片的尺寸和大小
压缩图片大小,尺寸不变 将已知路径的图片压缩至不大于目标大小,并保存至指定路径 /** * 质量压缩,通过给定的路径来压缩图片并保存到指定路径 * * @param srcPath * 资源图片的路径 ...
- 基于java callable及future接口解决生产者消费者问题
这两天复习java线程时,把java里面的线程基本知识点与jdk1.5以后新添加的一些类的使用都了解了一下,借用生产者消费者的问题来将他们实践一下. 题目:(题目在csdn一大牛的空间找的) 生产者- ...
- Redhat修改本地yum源
1.将Centos系统的ios文件传到服务器,比如传到/root目录下: 2.将ios文件挂载到本地,需要在本地建立一个文件夹,比如/yum; mkdir /yum mount -o loop /ro ...
- C#中的委托是什么?
概述 委托类似C++中的函数指针,但是又有所不同.在C++中,函数指针不是类型安全的,它指向的是内存中的某一个位置,我们无法判断这个指针实际指向什么,对于参数和返回类型就更难以知晓.而.NET的委托则 ...
- java开发中的23中设计模式
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- _CrtMemBlockHeader
typedef struct _CrtMemBlockHeader{// Pointer to the block allocated just before this one:struct _Crt ...
- KM算法专题
原文:http://972169909-qq-com.iteye.com/blog/1184514 题目地址:这里. 1)求图中所有环的总长度(环的长度不唯一)的最小值.当无法得到完备匹配时说明环不存 ...
- C++程序设计教程学习(1)-第一部分 编程基础
第一章 概述 C++到底难不难学?没有学不会的事情 1.1 程序设计语言 语言 编程语言 人和计算机交流的工具,群体扩大,人人间交流过程描述与信息表达的工具 机器语言,汇编语言,高级语言 1.2 C+ ...
- ATM Solved Problem code: HS08TES
# ATM import sys withdraw, balance = map(float, sys.stdin.readline().strip().split()) # strip()用法去除结 ...
- Android热补丁动态修复
1.前言 由于公司项目中使用到热修复技术,之前对这块技术知之甚少,所以有时间去学习了解了一下. 2.学习资源 2.1 热修复介绍 还是鸿洋老师的精彩讲解,中间引用了Andorid dex分包方案和QQ ...