android01-CalendaRun icon indicating copy to clipboard operation
android01-CalendaRun copied to clipboard

πŸ“† μ•ˆλ…• λ‚œ 달렀달λ ₯이야! λ„ˆμ˜ 일정 μˆ˜ν–‰μ„ 도와쀄 μŠ€μΌ€μ€„λŸ¬λž€λ‹€! πŸ§™β€β™‚οΈ

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