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整除,那麼它會自動縮小其內容,並居中。
相關文章
相關標籤/搜索