마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

코틀린에서 material 달력

2개의 답변

+1 추천
 
채택된 답변

코틀린의 경우는 기본 생성자는 추가해줄 필요가 없어요. 자동으로 컴파일러가 처리해줍니다. 그리고 생성자 인자가 있는 경우는 
블로그코드처럼 클래스명 옆에 추가해 줍니다.

블로그에 나오는 코틀린 클래스입니다.

class HolidayDecorator(var holidays: ArrayList<CalendarDay>) : DayViewDecorator {
    override fun shouldDecorate(day: CalendarDay): Boolean {
        return holidays.contains(day)
    } //여기서 true가 리턴되면 decorate 함수가 실행된다.

    override fun decorate(view: DayViewFacade?) {
        if (view != null) {
            view.addSpan(ForegroundColorSpan(Color.RED))
        }
    }

}

 

이걸 자바코드로 변경하면 아래와 같습니다.

public class HolidayDecorator implements DayViewDecorator {

    private List<CalendarDay> holidays;

    public HolidayDecorator(List<CalendarDay> holidays) {
        this.holidays = holidays;
    }

    @Override
    public boolean shouldDecorate(CalendarDay day) {
        return holidays.contains(day);
    }

    @Override
    public void decorate(DayViewFacade view) {
        if (view != null) {
            view.addSpan(new ForegroundColorSpan(Color.RED));
        }
    }
}

 

안드로이드 개발을 하려면 아직 자바만 지원하는 라이브러리나 레퍼런스도 많기 때문에 코드를 읽을 줄은 아시는게 좋습니다.

 

 

spark (226,420 포인트) 님이 2023년 1월 11일 답변
enerigpy님이 2023년 1월 11일 채택됨
DayViewDecorator에서 빨갛게 떠가지구

본래 자바에서는 com.prolificinteractive.materialcalendarview.DayViewDecorator;가 import 되는데

이걸 코틀린에서 import가 안되네요 깃허브에도 decorator가 없는거 같아서요.
gradle에
maven { url 'https://jitpack.io' }
를 추가하셔야 해당 클래스가 들어간 걸 다운로드 받는 것 같아요. 최신 버전 gradle의 경우라면 위의 repo를 settings.gradle에 추가해 주셔야 해요.
네 그건 원래 이걸 쓸려면 선언하는거여서 이미 했어요
import가 자바에서는 되는데  코틀린이라서 안된다는건 이해하기 힘드네요. 코틀린으로 해당 클래스를 만들어도 자바처럼 import가 되어야 정상이예요.
이건 제 코틀린 코드예요.
import android.graphics.Color
import android.text.style.ForegroundColorSpan
import com.prolificinteractive.materialcalendarview.CalendarDay
import com.prolificinteractive.materialcalendarview.DayViewDecorator
import com.prolificinteractive.materialcalendarview.DayViewFacade

class HolidayDecorator(private val holidays: List<CalendarDay>) : DayViewDecorator {
    override fun shouldDecorate(day: CalendarDay): Boolean {
        return holidays.contains(day)
    }

    override fun decorate(view: DayViewFacade) {
        view.addSpan(ForegroundColorSpan(Color.RED))
    }
}
implementation 'com.applandeo:material-calendar-view:1.9.0-rc03'

이거로 하고있어요 import com.prolificinteractive이 아니라 import com.applandeo

코틀린용이 따로 있어서 https://github.com/Applandeo/Material-Calendar-View/tree/master/library/src/main/java/com/applandeo/materialcalendarview/utils

prolificinteractive은 자바용인거 같구요
둘은 서로 다른 라이브러리인 것 같은데요.
네 자바로된 라이브러리로 코틀린을 쓸수 있나요?
코틀린은 자바코드로 변환됩니다. 따라서 자바 라이브러리도 코틀린에서 사용 가능하고 그 반대로도 가능합니다.
https://goatlab.tistory.com/928

코틀린으로 하는중인데 달력 객체 선언 하는게 문제네요

materialCalendarView = findViewById<View>(R.id.calendarView) as MaterialCalendarView


ApiSimulator를 사용하면 deprecated되는데 어떻게 해결해야 할까요
0 추천
해당 블로그에 HolidayDecorator를 보면 DayViewDecorator를 상속받아서 원하시는 대로 변경하시면 될 것 같은데요. 별도로 설명이 필요 없을 정도로 사용법 자체는 굉장히 직관적이네요. 실제 핵심적인 부분은 DayViewDecorator 안에서 안드로이드 뷰를 핸들링하는 부분인 것 같구요.
spark (226,420 포인트) 님이 2023년 1월 11일 답변
네 실제 저거로 사용해 보려고 하면 DayViewDecorator 함수를 선언해줘야 하는데 그게 생략되어 있어서 좀 난해하네요
...