Divide and Conquer
Material Calendar 커스텀 버전 안 내리고 copyTo() 해결 solution 방법 본문
https://github.com/prolificinteractive/material-calendarview
2022년 04월 03일 update 저처럼 시간 버리지 마세요
코드 내용
1. Material Calendar 주말 색상 바꾸기 (2가지 방법)
2. Material Calendar 월요일부터 시작하기 설정
1. Material Calendar를 이용하여 주말 색상 바꾸기 (짧은 2 번째 방법은 2 번에 같이)
첫 번째 코드는 MainActivity나 Fragment에 기술하면 됩니다
SaturdayDecorator, SundayDecorator이고 참고로 for구문은 의미가 없습니다......
materialCalendarView.addDecorators(
new SundayDecorator(),
new SaturdayDecorator());
package com.example.planner.UI.calendar;
import android.graphics.Color;
import android.text.style.ForegroundColorSpan;
import com.prolificinteractive.materialcalendarview.CalendarDay;
import com.prolificinteractive.materialcalendarview.DayViewDecorator;
import com.prolificinteractive.materialcalendarview.DayViewFacade;
import java.util.Calendar;
public class SaturdayDecorator implements DayViewDecorator {
private final Calendar calendar = Calendar.getInstance();
public SaturdayDecorator() {
}
@Override
public boolean shouldDecorate(final CalendarDay day) {
Calendar sDay = Calendar.getInstance(); // 시작일
Calendar eDay = Calendar.getInstance(); // 끝일
sDay.set(day.getYear(), day.getMonth()-1, day.getDay());
eDay.set(day.getYear(), day.getMonth(), day.getDay());
eDay.add(Calendar.DATE, -1);
int START_DAY_OF_WEEK = sDay.get(Calendar.DAY_OF_WEEK);
int END_DAY = eDay.get(Calendar.DATE);
int C = 7 - START_DAY_OF_WEEK;
sDay.set(day.getYear(), day.getMonth()-1+C, day.getDay());
for(int i=1; i < END_DAY; i++) {
if(i%7 == 0){
day.getDay();
}
}
return START_DAY_OF_WEEK == 7;
}
@Override
public void decorate(DayViewFacade view) {
view.addSpan(new ForegroundColorSpan(Color.BLUE));
}
}
package com.example.planner.UI.calendar;
import android.graphics.Color;
import android.text.style.ForegroundColorSpan;
import com.prolificinteractive.materialcalendarview.CalendarDay;
import com.prolificinteractive.materialcalendarview.DayViewDecorator;
import com.prolificinteractive.materialcalendarview.DayViewFacade;
import java.util.Calendar;
public class SundayDecorator implements DayViewDecorator {
private final Calendar calendar = Calendar.getInstance();
public SundayDecorator() {
}
@Override
public boolean shouldDecorate(final CalendarDay day) {
Calendar sDay = Calendar.getInstance(); // 시작일
Calendar eDay = Calendar.getInstance(); // 끝일
sDay.set(day.getYear(), day.getMonth()-1, day.getDay());
eDay.set(day.getYear(), day.getMonth(), day.getDay());
eDay.add(Calendar.DATE, -1);
int START_DAY_OF_WEEK = sDay.get(Calendar.DAY_OF_WEEK);
int END_DAY = eDay.get(Calendar.DATE);
int C = 1 - START_DAY_OF_WEEK;
sDay.set(day.getYear(), day.getMonth()-1+C, day.getDay());
for(int i=1; i < END_DAY; i++) {
if(i%7 == 0){
day.getDay();
}
}
return START_DAY_OF_WEEK == 1;
}
@Override
public void decorate(DayViewFacade view) {
view.addSpan(new ForegroundColorSpan(Color.RED));
}
}
2. 월요일부터 시작하기 설정
커스텀을 위해 라이브러리가 사용됩니다
안 되는 분들이 확인해야 할 것
allprojects {
repositories {
google()
mavenCentral()
maven { url 'https://jitpack.io' }
}
}
// calendar
implementation 'com.github.prolificinteractive:material-calendarview:2.0.1'
implementation 'com.jakewharton.threetenabp:threetenabp:1.4.0'
setFirstDayOfWeek(DayOfWeek.of(Calendar.MONDAY))도 작동
materialCalendarView.state().edit()
.setFirstDayOfWeek(DayOfWeek.MONDAY)
.setCalendarDisplayMode(CalendarMode.MONTHS) // WEEKS
.commit();
주말 색상 바꾸기 짧은 2 번째 방법
2 번대로 설정해야 작동합니다
package com.example.planner.UI.calendar;
import android.graphics.Color;
import android.text.style.ForegroundColorSpan;
import com.prolificinteractive.materialcalendarview.CalendarDay;
import com.prolificinteractive.materialcalendarview.DayViewDecorator;
import com.prolificinteractive.materialcalendarview.DayViewFacade;
import org.threeten.bp.DayOfWeek;
public class SundayDecorator implements DayViewDecorator {
public SundayDecorator() {
}
@Override
public boolean shouldDecorate(final CalendarDay day) {
final DayOfWeek weekDay = day.getDate().getDayOfWeek();
return weekDay == DayOfWeek.SUNDAY;
}
@Override
public void decorate(DayViewFacade view) {
view.addSpan(new ForegroundColorSpan(Color.RED));
}
}
can't use copyTo()
안드로이드 스튜디오 캘린더뷰 커스텀
day.copyTo(calendar);
error: cannot access LocalDate
Error line: mcvDisplayDeliveries.setSelectedDate(CalendarDay.today());
error: cannot access LocalDate calendarView.setCurrentDate(CalendarDay.today());
mcv_showOtherDates
onDateSelected(MaterialCalendarView
at com.android.build.gradle.internal.tasks.CheckDuplicateClassesDelegate.run(CheckDuplicateClassesDelegate.kt:71)
class file for org.threeten.bp.DayOfWeek not found
class file for org.threeten.bp.LocalDate not found
Compilation error could not find LocalDate
public boolean shouldDecorate(CalendarDay day) {
threetenabp
add(Calendar.DATE, -1);
.add(Calendar.DAY_OF_MONTH, 10);
.getDayOfWeek();
int weekDay = calendar.get(Calendar.SUNDAY);
int weekDay = calendar.get(Calendar.SATURDAY);
int date = calendar.get(Calendar.DATE);
int Day = day.getDay();
day.getDate(Calendar.DAY_OF_WEEK);
weekDay == Calendar.SATURDAY || weekDay == Calendar.SUNDAY;
return weekDay == DayOfWeek.SATURDAY || weekDay == DayOfWeek.SUNDAY;
final DayOfWeek weekDay = day.getDay();
Date date = calendar.getTime();
int Date = (int)calendar.getTime();
int sunday = day.getDate().with(DayOfWeek.SATURDAY).getDayOfMonth();
return weekDay == Calendar.SATURDAY;
int weekDay = calendar.get(Calendar.DAY_OF_WEEK);
return weekDay == day.getDay();
return day.getCalendar().get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY;
return day.getDay();
day.copyTo(calendar);
calendar.add(7, day.getDay());
org.threeten.bp.LocalDate CalDay = day.getDate();
calendar.set(day.getYear(), day.getMonth(), day.getDay());
int sat = calendar.get(Calendar.DAY_OF_WEEK);
error: implementation ("com.github.prolificinteractive:material-calendarview:2.0.0") {
exclude group: 'com.jakewharton.threetenabp', module: 'threetenabp'
}
How to fix ClassNotFoundException for org.threeten.bp.LocalDateTime?
How to DisableDecorator to one days of week?
안드로이드 스튜디오 Android Studio
요일로 날짜 구하기
특정 날짜 요일 구하기
'성장캐 > 안드로이드 스튜디오' 카테고리의 다른 글
Firebase를 이용하여 안드로이드로 도어록 제어하기 (0) | 2022.06.02 |
---|---|
navigation backstack (0) | 2022.04.09 |
[해결] Build was configured to prefer settings repositories over project repositories but repository 'Google' was added by build file 'build.gradle' (0) | 2022.03.07 |
drawerable navigation에 expandable list (0) | 2022.03.06 |
UI Design을 돕는 어플 (0) | 2022.02.20 |