본문 바로가기

Android/Kotlin

Material Calendar 커스텀하기 (2)

반응형

안녕하세요 오늘은 달력 커스텀하기 2번째 시간입니다.


첫번째꺼는 android 에 있는데, 이건 kotlin 에 있는 이유는... 여긴 제가 처음부터 구현했기 때문에 kotlin을 사용해서입니다.


단순한 이유죠..




여튼 바로 시작할게요!!! 고생좀 하다보니 알게 되는 ... 스트레스가 다 풀렸어요! 화이팅!


우선 1번처럼 


https://github.com/Applandeo/Material-Calendar-View


에서 library 만 import 합니다.


그런 다음엔 이제 가져다 쓸 일만 남았죠. 고생하셨습니다.


이러고 끝내고 싶ㄷ...











아니 절대 아니구요...

시작하겠습니다.



우선 xml에 아래와 같이 넣어줍니다.

<com.applandeo.materialcalendarview.CalendarView
android:id="@+id/calendar_month_cv_month"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:eventsEnabled="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:selectionColor="@color/black"
app:type="one_day_picker" />


이렇게 넣어준 뒤, 간단한 기능들은 위 주소에서 참고하세요!


이 캘린더는 특이하게,


바로 setOnCickListener가 가능합니다.


즉, calendar_month_cv_month.setOnClick~ 이게 가능한거죠


이렇게 설정하면, 원하는 날짜를 클릭했을 때의 event를 받아올 수 있습니다.


click 했을 때의 eventDay를 통해 클릭한 날짜를 받아와 원하는 이벤트를 구현하세요!



private fun monthlyCalendar() {
val calendarMin = Calendar.getInstance()
calendarMin.add(Calendar.DAY_OF_MONTH, -30)
val calendarMax = Calendar.getInstance()
calendarMax.add(Calendar.DAY_OF_MONTH, +30)

calendarView.setOnSampleReceivedEvent(this)
calendarView.setMinimumDate(calendarMin)
calendarView.setMaximumDate(calendarMax)
}


이런 방식을 통해 최소 날짜와 최대 날짜를 구현합니다.


예시로 앞 뒤로 30일 전후를 보이도록 했습니다.


setOnSampleRecivedEvent는 library 내에 있는 calendarView,java 의 viewPager,OnPagerChangeListener의 값을 받아와 


textView에 .text하기 위해 구현한 콜백 리스너입니다 ㅎㅎ


또, calendarView에 .setEvent를 통해 원하는 이벤트 값을 넣어줄 수 있습니다.


이벤트 값은 List<EventDay> 형태로 넣어줘야 하니 잊지마세요! (EventDay 를 원하는 입맛에 맞게 커스텀 가능해요!)


이 아이는 여기서 끝이에요! 






제가 진행한 커스텀은


1. 오늘 날짜에서 원이 움직이지 않고 클릭한 날의 이벤트만 발생하도록 구현


2. 최소, 최대 날짜 이전, 이후 날짜 클릭 시 커스텀 토스트 팝업 띄우기


3. 날짜에 원하는 이벤트를 총 4개까지 보여주도록 커스텀

(예를 들어, 28일에 영어공부, 프로그래밍 공부, 알고리즘 공부, db 공부, 책읽기 라고 적으려고 한다면,  

앞의 3개만 텍스트로 보여주고, 뒤에 2개는 +2로 나타내도록 구현했습니다. 이 부분이 상당히 애를 먹었죠..)






이렇게 진행한거 같네요.. 뭔가 더 있는거 같은데 기억이...


필요하신 분들은 댓글을 통해 알려드리겠습니다.


너무 다 써놓으면.. 혼나요..


이렇게 2가지 커스텀 캘린더를 알아보았습니다.


고생하시고 저도 많은 노력을 통해 알아낸 것이니 이해해주세요!!! 단 궁금하면 다 가르쳐 드립니다.ㅎㅎ









반응형