Androidでカレンダーを操作する必要があったのですが,「この日はOK,この日はNG」みたいな指定の仕方が遷移なしでできるライブラリが無いなぁということになったのでいっそ自作して公開してみました
細かいことはリポジトリのREADME.mdを読むとわかるのですが
<dokup.xyz.multiselectablecalendar.ui.MultiSelectableCalenderView android:id="@+id/calender" android:layout_width="match_parent" android:layout_height="wrap_content" app:monthBackgroundColor="#81D4FA" <!-- color of background parts for month --> app:monthTextColor="#546E7A" <!-- color of text for month --> app:weekBackgroundColor="#03A9F4" <!-- color of background parts for week --> app:weekTextColor="#FFFFFF" <!-- color of text for month --> app:dayBackgroundColor="#FFFFFF" <!-- color of background for date --> app:dayTextColor="#616161" <!-- color of text for date --> app:availableDayBackgroundColor="#FF9800" <!-- color of background for date which is available --> app:availableDayTextColor="#FFFFFF" <!-- color of text for date which is available --> app:unavailableDayBackgroundColor="#757575" <!-- color of background for date which is unavailable --> app:unavailableDayTextColor="#FFFFFF" <!-- color of text for date which is unavailable --> app:chevronColor="#1565C0" <!-- color of chevron for month change --> />
のようにほとんど全てのパーツについて色指定をできるようにしたり, ScheduleMode
というenumを設定することで
ScheduleMode.SINGLE
- OK/NG/特になしを日にちごとにタップすることで設定
- available -> unavailable -> nothing -> available -> ...
ScheduleMode.RANGE
- A日からB日までタップした範囲の全ての日付をOKにする
MultiSelectableCalendarView#setInterval(int interval)
によって前後にNGの日にちを設定可能
ScheduleMode.DISPLAY
- 操作不能の表示用モード
というように複数の表示モードを指定したりできるようにしてみました.
カレンダーで設定したOK/NGの日付一覧ですが,
AvailableSchedule schedule = calendarView.getAvailableSchedule // get AvailableSchedule instance List<Calendar> available = schedule.getAvailableCalendarList(); // get available date as java.util.Calendar's list List<Calendar> unavailable = schedule.getUnavailableCalendarList(); // get unavailable date as java.util.Calendar's list
のようにすることで java.util.Calendar
のListとして取得できます.また MultiSelectableCalendarView#setOnScheduleChangedListener(OnScheduleChangedListener listener)
のcallbackでも取得できます.
勉強になったこと
- custom viewの実装
- werckerによるデプロイまでのCI
- 昨日やっとデプロイできるようになりました.というのもdocker imageを作れるだけのストレージに余裕がなかったので研究室のPCを借りてdocker hubにimageをpushするという()
PR/issueや「こここうした方がいいんじゃね」みたいな意見でもなんでもいいのでいただけると泣いて喜ぶと思うのでお願いします
くそおまけ
記事を書いている間に年齢がインクリメントしました.