[Android] 스케줄 캘린더 라이브러리 배포하기

uuranus·2024년 6월 8일
post-thumbnail

미리 보는 결과

결과 gif
  • 프로젝트를 진행하면서 구글이나 네이버 캘린더처럼 스케줄을 표시해주는 캘린더가 필요했다.
  • 자주 쓰이는 캘린더 타입이기 때문에 라이브러리가 있을 거라 생각했는데 생각보다 compose로 만들어진 캘린더 라이브러리가 없었다.
  • 그래서 내가 원하는 스타일의 캘린더를 직접 만들었고 이를 라이브러리로 배포하였다.

뷰 구조

캘린더 뷰 구조

  • 전체 뷰 구조는 이렇게 구성하였고 캘린더 전체는 HorizontalPager로 감싸서 좌우로 스크롤이 가능하게 하였다.

데이터 구조

  • 캘린더에서 사용하는 데이터 구조는 Map<ScheduleDate, ScheduleInfo< T >> 이다.
  • ScheduleDate는 날짜를 표현하는 데이터 클래스이고 ScheduleInfo의 구조는 아래 사진과 같다.
ScheduleCalendar(
        schedules = mapOf(
            ScheduleDate.create(2024, 6, 1) to ScheduleInfo(
                isCheckNeeded = false,
                schedules = listOf(
                    ScheduleData(
                        title = "schedule1",
                        color = Purple,
                        detail = "Schedule Info 1",
                    )
                )
            ),
        )
    )
스케줄 데이터 구조

커스터마이징

기본값

  • 기본값은 월요일부터 시작하며 주말의 색깔 구분이 없다.
기본값 스크린샷

시작요일

  • 아래처럼 설정하면 일요일부터 시작하는 캘린더를 만들 수 있다.
 ScheduleCalendar(
        schedules = schedules,
        isMondayFirst = false
    )
일요일 first

색깔 설정

  • 아래처럼 기존 설정된 색깔을 변경하여 주말에 색을 설정할 수 있다.
 ScheduleCalendar(
        schedules = schedules,
        calendarColors = ScheduleCalendarDefaults.colors(
            lightColors = ScheduleCalendarDefaults.defaultLightColors().copy(
                saturdayColor = Blue,
                sundayColor = Red
            ),
            darkColors = ScheduleCalendarDefaults.defaultDarkColors().copy(
                saturdayColor = DarkBlue,
                sundayColor = DarkRed
            ),
        )
    )
주말 색깔 first

다크모드 지원

  • 스케줄의 컬러는 Light 버전으로 설정하며 자동으로 Dark 모드로 변경된다.
다크 모드 first

시스템 언어 반영

  • 시스템의 언어를 반영해서 요일과 달의 이름이 바뀌고 년도와 달의 format을 변경해줄 수 있다.
ScheduleCalendar(
        schedules = schedules,
        calendarFormat = ScheduleCalendarDefaults.formats().copy(
            monthHeaderFormat = "MMMM YYYY"
        )
    )
시스템 언어 설정

배포하기

https://android-developer.tistory.com/11

  • 이 분 블로그를 참고하여 배포하였다.
  • 추가적으로 나의 경우 app module과 library module의 java 버전이 달라서 APG(Android Gradle Plugin) 오류가 났었다.

Github

profile
Frontend Developer

2개의 댓글

comment-user-thumbnail
2024년 12월 4일

좋은 글 잘 보고 갑니다! 잘 사용하겠습니다!

1개의 답글