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。

  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整除,那么它會自動縮小其內容,並居中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM