Divide and Conquer

Material Calendar 커스텀 버전 안 내리고 copyTo() 해결 solution 방법 본문

성장캐/안드로이드 스튜디오

Material Calendar 커스텀 버전 안 내리고 copyTo() 해결 solution 방법

10살 2022. 4. 3. 02:08
728x90

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
요일로 날짜 구하기
특정 날짜 요일 구하기 

반응형
Comments