开源项目Material Calendar View 学习记录 (一)
开源项目Material Calendar View 学习记录
Github:
https://github.com/prolificinteractive/material-calendarview
README.md 中文翻译:
Material Calendar View将Android CalendarView 的Material Design风格向后移植。其目标是拥有Material的视觉和使用效果,而不是完全依赖于平台的实现。
0.8.0版本的主要变更
此视图现在对布局参数的响应更好了。此功能类似于ImageView上的adjustViewBounds参数,该参数会让视图尝试占用所需的尽可能多的空间,但我们是基于tile尺寸而不是宽高比。例外情况是,如果tileSize参数被设置了,将会覆盖其它参数并将视图设置成该尺寸。
使用方法
1,将compile 'com.prolificinteractive:material-calendarview:0.8.1' 加到你的依赖项中。
2,添加MaterialCalendarView到你的布局或视图层中。
3,需要时,设置一个OnDateChangedListener 或者调用MaterialCalendarView.getSelectedDate()。
例子:
<com.prolificinteractive.materialcalendarview.MaterialCalendarView
android:id="@+id/calendarView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:mcv_showOtherDates="boolean"
app:mcv_arrowColor="color"
app:mcv_selectionColor="color"
app:mcv_headerTextAppearance="style"
app:mcv_dateTextAppearance="style"
app:mcv_weekDayTextAppearance="style"
app:mcv_weekDayLabels="array"
app:mcv_monthLabels="array"
app:mcv_tileSize="dimension"
app:mcv_firstDayOfWeek="enum"
app:mcv_leftArrowMask="drawable"
app:mcv_rightArrowMask="drawable" />
自定义
这个库的一个目标是可定制化,Java代码和XML属性中包含下列可用的选项:
|
属性 |
类型 |
描述 |
|
showOtherDates |
boolean |
默认情况下,只有一个内的日期才会显示出来。如果设置为true,那么之前或之后月份的日期会被用来填充空白空间。此属性会使显示的日期超出最小和最大值范围。 |
|
arrowColor |
color |
设置日历翻页箭头的颜色,默认是黑色。 |
|
selectionColor |
color |
设置日期选择器的颜色。默认情况下,在5.0以上使用?android:attr/colorAccent,或者AppCompat库中的?attr/colorAccent。 |
|
headerTextAppearance |
style |
重设顶部年月指示器的文本外观。 |
|
weekDayTextAppearance |
style |
重设星期指示器的文本外观。 |
|
dateTextAppearance |
style |
重设日期的文本外观。 |
|
weekDayLabels |
array |
提供星期的定制标签。这会给此CalendarView设置一个ArrayWeekDayFormatter 。默认使用Java的Calendar类,获取一个短的显示名。 |
|
monthLabels |
array |
提供月份的定制标签。这会给此CalendarView设置一个MonthArrayTitleFormatter 。默认使用SimpleDateFormat 的"MMMM yyyy"格式。 |
|
tileSize |
dimension |
对每一个tile设置一个定制的尺寸。日历中的每一天是一个tile,顶部的控制栏是一个tile高。整个控件是7个tile宽,八个tile高。默认的tile尺寸是44dp。 |
|
firstDayOfWeek |
enum |
设置每月的第一天。 |
|
leftArrowMask |
drawable |
设置左箭头的绘制效果。 |
|
rightArrowMask |
drawable |
设置右箭头的绘制效果。 |
只在Java中可用的属性:
|
Method |
Description |
|
setMinimumDate() |
设置日历中最早可见的日期。 |
|
setMaximumDate() |
设置日历中最晚可见的日期。 |
|
setSelectedDate() |
设置选中的日期,必须在最小值和最大值之间。 |
|
setTopbarVisible() |
设置顶栏(箭头和标题) 可见或消失。 |
事件,高亮,定制选择器,还有更多!
Material CalendarView 提供了API,允许你修改日期的外观。 DayViewDecorator API 可以做到:
设置自定义的背景图片;
设置自定义的选中图片;
为完整的日期文本使用span(提供了DotSpan,在文本正下方画一个点);
设置日期为不可用。
要做到这些,你需要创建一个新的DayViewDecorator实例,通过addDecorator()方法添加给日历。装饰效果通过传递给decorate()方法的DayViewFacade对象完成。所有DayViewFacade的调用会应用到所有shouldDecorate()方法返回true的日期。
DayViewFacade有四个方法提供装饰效果:
1,setBackgroundDrawable() 设置一个drawable对象到最后方,此对象会响应状态的改变。
2,setSelectionDrawable() 允许为特殊日期定制选择指示器。
3,addSpan() 给整个日期标签设置span。
4,setDaysDisabled() 允许你禁用或重新使能日期。此方法不会影响最小和最大日期。
如果你的一个装饰器在被添加给日历视图后改变了,确保你调用了MaterialCalendarView.invalidateDecorators()方法来使这些修改生效。
当实现一个DayViewDecorator对象时,确保他们尽可能的高效。记住shouldDecorate()方法在每个月份视图中需要被调用42次。一个简单的提高效率的方法是将你的数据在shouldDecorate()方法外转换成CalendarDay。
查看示例app中的BasicActivityDecorate来了解一些例子。
开源项目Material Calendar View 学习记录 (一)的更多相关文章
- Material Calendar View 学习记录(二)
Material Calendar View 学习记录(二) github link: material-calendarview; 在学习记录一中简单翻译了该开源项目的README.md文档.接下来 ...
- 编译CM13源码添加来去电归属地 SudaMod开源项目,查看commit提交记录
这个问题纠结了很多时间,感谢苏打先森@Sudamod的开源项目. 大家知道CM13是没有来去点归属地的,就算有那也是google,对于中国人不适用,所以这里把方法贡献出来. 1.与通话有关的app D ...
- 开源库RxJava、ButterKnife学习记录
1. 简介 RxJava "RxJava is a Java VM implementation of Reactive Extensions: a library for composin ...
- BLHeli/ BLHeli_S开源无刷电调学习记录
BLHeli的历史轨迹:BLHeli -> BLHeli_S -> BLHeli_32,我们重点学习BLHeli_S版本. 该代码支持常规的1-2ms脉冲宽度输入,以及Oneshot125 ...
- iOS开发之开源项目链接
1. Coding iOS 客户端 Coding官方客户端. 笔者强烈推荐的值得学习的完整APP.GitHub - Coding/Coding-iOS: Coding iOS 客户端源代码 2. OS ...
- 国内最火的 HTML、CSS、JavaScript 开源项目 Top 榜,你知多少?
对于开发者而言,想要着手前端开发,HTML.CSS 和 JavaScript 是三项必备的基础技能.而如何事半功倍地掌握好这些知识?通过了解当下火热的开源项目不乏为最佳学习姿势.本文盘点国内评分最高且 ...
- 世界级的开源项目:TiDB 如何重新定义下一代关系型数据库
著名的开源分布式缓存服务 Codis 的作者,PingCAP 联合创始人& CTO ,资深 infrastructure 工程师的黄东旭,擅长分布式存储系统的设计与实现,开源狂热分子的技术大神 ...
- android 学习记录-----------android 活动 意图 碎片
将此篇博客作为记录android项目开发过程中的学习记录
- 【转】优秀的Go开源项目
http://www.mhtclub.com/post/60 目录 优秀的Go开源项目 中文Go语言学习教程 国外的Go语言教程 openbilibili源码 Go作为Google2009年推出的 ...
随机推荐
- 干货--微信公众平台客户端调试工具-初试WPF开发
本工具可以由任意一个开发微信公众平台的开发者使用,虽然它本身使用WPF(C#)开发的,但是并不受你想调试的服务所用的语言的影响. 之前一直在做微信公众平台开发,客户端调试是必须做的事情,一直以来都是用 ...
- 为什么子线程不能做UI操作
在子线程中是不能进行UI 更新的,而可以更新的结果只是一个幻像:因为子线程代码执行完毕了,又自动进入到了主线程,执行了子线程中的UI更新的函数栈,这中间的时间非常的短,就 让大家误以为分线程可以更新U ...
- 有几数组表单,js怎么获得数组并动态相加输出到文本框
有几数组表单,js如何获得数组并动态相加输出到文本框<input name= "fee1[] "> <input name= "fee2[] & ...
- 包装 request Demo
//包装request,增强getParameter方法 class MyReq extends HttpServletRequestWrapper{ private HttpServletReque ...
- MySQL 5.6 root密码丢失,使用mysqld --skip-grant-tables
MySQL 5.6 root密码丢失,(window平台)使用mysqld –skip-grant-tables启动MySQL服务,出现警告: 1 [Warning] TIMESTAMP with i ...
- PHP学习系列(1)——字符串处理函数(1)
从09年开始使用JAVA到现在差不多5年多了,然后由于即将要去的公司(研究僧终于要毕业了!)是使用PHP,Python作为后台开发语言的,所以要开始一段双P的学习旅程.用过PHP的都说这是很简单的一门 ...
- table-cell的手机应用场景
前言 最近在前端观察看见了这篇老文章,看见了元素居中的5种办法,其中提到了display:table-cell这个css显示的新属性,按照当时的浏览器市场来说想必兼容性会是糟糕的一比,但是现在这坛老酒 ...
- 用lambda表达式替代 for循环进行批量操作。
IEnumerable<Rect> rectlist3 = rectlist.Select(rect =>newRect(rect.X + 2000, rect.Y, rect.re ...
- iOS学习之懒加载
懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,其实是重写getter方法. 注意:如果是懒加载的话则一定要注意先判断是否已经有了,如果没有那么再去进行实例化 使用懒 ...
- Gson 禁止特殊字符转码
Map<String,String> map = new HashMap<String,String>(); map.put("url", "&a ...