開源項目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來了解一些例子。
