Android Custom Calendar with RecyclerView

사용 버전: Android Studio 4.1
사용 언어: Kotlin 1.4.10

안드로이드 Custom Calendar with RecyclerView를 해보겠습니다.


이번 시간에는 RecyclerView를 이용하여 Calendar를 만들어보겠습니다.
안드로이드에 보면, 기본으로 제공되는 CalendarView가 있고, Material에 보면 DatePicker라고 해서 또 달력을 제공해 주기도 합니다. 하지만 사용자가 조작할 수 있는 부분이 정해져 이따 보니, 자체적으로 달력을 만들어야 할 필요가 생갑니다.


dataBinding을 사용합니다.



달력이 그려질 Fragment를 만드시고, layout으로 갑니다.








이렇게 적어줍니다.


그러면, 이런 디자인이 됩니다.








Calendar에 숫자를 저장할 Class를 만듭니다.






저는 CalendarInfo로 만들었고, 아래처럼 정의했습니다.







RecyclerView 안에 그려질 Layout을 하나 만듭니다.








저는 date_list로 만들었습니다.

variable에는 아까 만든 달력 정보를 넣습니다.

아래처럼 적어줍니다.











fragment의 RecyclerView에 Calendar를 그리기 위한 Adapter를 만듭니다.




저는 CalendarAdapter로 만들었습니다.



RecyclerView를 사용해 줍니다.




위의 코드에서 현재 코드에 맞게 변경하면 아래와 같습니다.

DiffCallback 부분은 이렇습니다.







ViewHolder 부분






Adapter 부분







이제, CalendarFragment로 갑니다.

어댑터를 연결해 줍니다.







Calendar 변수를 만들어서 현재 시간을 입력받고, 이번 달의 첫째 날로 설정합니다.







이번 달의 마지막 날짜와 요일, 달을 변수로 만들고, Adapter로 보낼 Mutable List를 하나 만듭니다.






날짜에 맞는 CalendarInfo를 만들고 list에 추가합니다.

그 뒤, submitList로 날짜를 adapter로 보냅니다.







실행해 봅시다.










숫자를 변경해 주기 위해, BindingAdapter를 사용합니다.










다시 실행하면...

짜잔!





끝.



카테고리: Android

댓글

  1. 안녕하세요. 흥겹게 따라하던 중, 마지막 한가지,
    "숫자를 변경해 주기 위해, BindingAdapter를 사용합니다." 부분에서 적용이 되지 않습니다.

    @Binding Adapter 부분을 어디에 코딩해야 하는지요?

    답글삭제
    답글
    1. 안녕하세요. 그 부분은 저같은 경우는 따로 비어있는 Kotlin 파일을 만들어서 거기에 @BindingAdapter를 모아놓습니다. 어디에 하든 아마 상관 없을거예요.

      삭제
  2. 영산홍님 안녕하세요.
    본 게시물 흥미롭게 잘 따라 하던 중
    마지막,
    ========================================
    숫자를 변경해 주기 위해, BindingAdapter를 사용합니다.
    ========================================

    부분에서 막혀서, 앞을 보지 못하고 있습니다.

    @BindingAdapter("setDate")
    fun TextView.setDate
    ...

    부분은 어느 파일의 위치에 삽입이 되어야 하는 것인지요?


    답글삭제
    답글
    1. 안녕하세요. 그 부분은 저같은 경우는 따로 비어있는 Kotlin 파일을 만들어서 거기에 @BindingAdapter를 모아놓습니다. 어디에 하든 아마 상관 없을거예요.

      삭제

댓글 쓰기

궁금한 점은 댓글 달아주세요.
Comment if you have any questions.

이 블로그의 인기 게시물

Python OpenCV 빈 화면 만들기

Python urllib.parse.quote()

Python bytes.fromhex()

Android AVD Ram size change

Forensics .pyc 파일 .py로 복구하기

Android Minimum touch target size

KiCad 시작하기 7 (FreeRoute 사용하기 2)

Android Notification with Full Screen

C++ OpenCV 모폴로지 침식, 팽창

KiCad 시작하기 2 (PCB 만들기)