Skip to content

boostcampwm-2021/android01-CalendaRun

Repository files navigation

CKS Calendar

jitpack-shield gmail-shield google-shield

CKS Calendar 라이브러리
  1. 설치법
  2. 사용법
  3. 커스텀
  4. 관련 링크
  5. 기여
달려달력 앱
  1. 설치
  2. Preview
  3. 용어 정리
  4. 기술 스택

CalendarSet

달력의 한 페이지로, 한 화면에 보여줄 기간

MonthCalendarView

가로 스와이프로 달력을 보여줍니다.

YearCalendarView

세로 스크롤로 달력을 보여줍니다.

월달력 연달력

설치법

Step 1. JitPack repository를 prject build.gradle에 추가합니다.

allprojects {
  repositories {
    ...
    maven { url 'https://jitpack.io' }
  }
}

Step 2. dependency를 추가합니다.

dependencies {
    implementation 'com.github.boostcampwm-2021:android01-CalendaRun:${version}'
}

사용법

제공 함수

fun setOnDateClickListener(onDateClickListener: OnDayClickListener)
fun setOnDaySecondClickListener(onDateSecondClickListener: OnDaySecondClickListener)
fun setSchedule(schedule: CalendarScheduleObject)
fun setSchedules(schedules: List<CalendarScheduleObject>)
fun setTheme(designObject: CalendarDesignObject)
fun resetTheme()
fun getDaySchedules(day: LocalDateTime): List<CalendarScheduleObject>
fun setCalendarSetList(calendarSetList: List<CalendarSet>)
fun setupDefaultCalendarSet()

리스너

  1. YearCalendarView 또는 MonthCalendarView를 레이아웃 또는 뷰 계층에 추가합니다.
  2. 필요하다면 OnDayClickListener 또는 onDaySecondClickListener 를 추가할 수 있습니다.
  • onDayClickListner는 날짜를 선택할 때 실행됩니다.
  • onDaySecondClickListner는 클릭된 날짜를 선택할 때 실행됩니다.

Example:

<com.drunkenboys.ckscalendar.yearcalendar.YearCalendarView
    android:id="@+id/calendar_year"
    app:onDayClick="@{(date, position) -> dayClickEvent(date)}"
    app:onDaySecondClick="@{(date, position) -> daySecondClickEvent(date)}" />

<com.drunkenboys.ckscalendar.monthcalendar.MonthCalendarView
    android:id="@+id/calendar_month"
    app:onDayClick="@{(date, position) -> dayClickEvent(date)}"
    app:onDaySecondClick="@{(date, position) -> daySecondClickEvent(date)}" />

일정 추가

data class CalendarScheduleObject(
    val id: Int,
    val color: Int,
    val text: String,
    val startDate: LocalDateTime,
    val endDate: LocalDateTime,
    val isHoliday: Boolean = false
)
val scheduleList = listOf(
    CalendarScheduleObject(
        0,
        ScheduleColorType.ORANGE.color,
        "Schedule01",
        LocalDateTime.now(),
        LocalDateTime.now()
    ),
    CalendarScheduleObject(
        1,
        ScheduleColorType.BLUE.color,
        "Schedule02",
        LocalDateTime.now(),
        LocalDateTime.now()
    ),
    CalendarScheduleObject(
        2,
        ScheduleColorType.GRAY.color,
        "Schedule03",
        LocalDateTime.now(),
        LocalDateTime.now()
    ),
)
binding.calendarMonth.setSchedules(scheduleList)
binding.calendarYear.setSchedules(scheduleList)

적용 사진

월달력 월달력

커스텀 테마

XML에서는 아래의 속성들을, 프로그래밍적 수정으로는 CalendarDesignObject를 통해 달력의 커스텀 요소를 지원합니다

XML

Attribute Type description
weekDayTextColor Color 평일 색상
holidayTextColor Color 공휴일 색상
saturdayTextColor Color 토요일 색상
sundayTextColor Color 일요일 색상
selectedFrameColor Color 날짜 선택 테두리 색상 Stroke 색상을 변경
backgroundColor Color 달력 배경 색상
selectedFrameDrawable Shape Drawable 날짜 선택 테두리
visibleScheduleCount Integer 보여질 일정 개수(5개 이하)

CalendarDesignObject

data class CalendarDesignObject(
    @ColorInt var weekDayTextColor: Int = Color.BLACK,
    @ColorInt var holidayTextColor: Int = ScheduleColorType.RED.color,
    @ColorInt var saturdayTextColor: Int = ScheduleColorType.BLUE.color,
    @ColorInt var sundayTextColor: Int = ScheduleColorType.RED.color,
    @ColorInt var selectedFrameColor: Int = ScheduleColorType.GRAY.color,
    @ColorInt var backgroundColor: Int = Color.WHITE,
    @DrawableRes var selectedFrameDrawable: Int = R.drawable.bg_month_date_selected,
    var textSize: Float = 10f,
    var textAlign: Int = Gravity.CENTER,
    val weekSimpleStringSet: List<String> = listOf("일", "월", "화", "수", "목", "금", "토"),
    val weekFullStringSet: List<String> = listOf("일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"),
    var visibleScheduleCount: Int = 3
) 

관련 링크

모든 문서는 위키에 저장되어 있습니다.

기여

  1. Fork Project
  2. 이슈 등록
  3. Feature Branch 생성 (git checkout -b feature/#IssueNumber)
  4. Commit (git commit -m 'Issue-#{Number} feat: AmazingFeature')
  5. Push Branch (git push origin feature/#IssueNumber)
  6. Pull Request 요청

달려달력

달려달력은 부스트캠프 웹•모바일 6기 Andrunken 팀이 개발 및 서비스하고 있는 달력 애플리케이션입니다.

달려달력은 사용자가 원하는 대로 달력을 구성하고 일정을 관리할 수 있습니다.

달력 관리

사용자는 새 달력을 추가할 수 있고, 달력들을 관리할 수 있으며, 수정, 삭제도 가능합니다.

커스텀 달력

사용자는 달력의 한 페이지를 월 단위(30일)가 아닌 임의의 기간을 설정할 수 있습니다. 또한 스와이프를 통해 달력의 일부 기간을 따로 확인할 수 있습니다.

일정 관리

달력에 일정을 추가하여 관리할 수 있습니다. 일정은 시간, 메모를 기록할 수 있고, 알림을 설정하여 선택된 시간에 알림을 받을 수 있습니다. 또한 달력에 표시될 일정의 색을 선택할 수 있습니다.

일정 검색

일정에 알림을 설정하여 선택된 시간에 알림을 받을 수 있습니다.

홈 화면 위젯

홈 화면에 위젯을 추가하여 오늘 일정을 확인할 수 있습니다.

테마 변경

다크 모드를 지원합니다. 달력의 디자인(달력, 글자 색 등)을 변경할 수 있습니다.

공휴일 지원

달력에 공휴일을 일정처럼 표시해서 보여줍니다.

설치

Get it on Google Play

Preview

데모 영상

용어 정리

달력

사용자의 최종 일정 또는 목표 (수능, 프로젝트 등)

슬라이스

달력의 한 페이지로 한 화면에 보여줄 기간

일정 단기간에 이룰 목표

기술 스택

  • Android Jetpack
    • Lifecycle
    • Databinding
    • Navigation
    • Room
    • Hilt
  • Coroutine / Flow
  • MVVM
  • Retrofit2