2023.02.25 덧붙임
컴포즈를 사용하면 아래 코드는 사용할 필요가 없는 코드이다. 눙물이 난다.
보통 코딩을 하며 프로젝트가 커지면 border관련 코드가 다음과 같이 쫘르륵 중복되어 나왔다
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<corners
android:radius="4dp"/>
<stroke
android:width="1dp"
android:color="@color/mint" />
</shape>
이러한 형태의 녀석이다.
그리고 이는 관리하기도 매우 어려워진다. 방법이 없을까 생각하다가 Programatic한 방법이 있다는것을 알았다. 그리고 이를 다음 하나의 메소드를 통해 관리할 수 있음을 알았다. 다음 프로젝트때 적용해야겠다.
@BindingAdapter("kakao:borderColor", "kakao:textColor", "kakao:radius", requireAll = false)
fun TextView.drawBorder(borderColor: Int?, textColor: Int?, radius: Int?
) {
this.setTextColor(
ContextCompat.getColor(
this.context,
textColor ?: R.color.black)
)
val border = GradientDrawable().apply {
this.setStroke(DensityUtil.dpToPx(1),
ContextCompat.getColor(
this@drawBorder.context,
borderColor ?: R.color.black))
cornerRadius = DensityUtil.dpToPx(radius ?: 4).toFloat()
}
background = border
}