본문 바로가기

[Android] XML TextView Style 동적 설정 - BindingAdapter

XML TextView Style 동적 설정

XML Style DataBinding Fail

데이터바인딩(DataBinding)을 통한 Style Code 설정

  • XML Style DataBinding Fail
    • XML 데이터바인딩에서는 Style옵션을 지원하지 않아 위의 코드처럼 구현이 불가능합니다
  • 상황에 따라 TextView의 Font Style을 다르게 동적으로 설정하려면 Code 작업 필요 > TextView의 BindingAdapter를 구현했습니다

 

1. TextView BindingAdapter Function

@BindingAdapter("bindTextViewStyle")
fun TextView.bindTextViewStyle(styleResourceId: Int) {
    if(styleResourceId != null) this.setTextAppearance(styleResourceId)
}

XML의 BindingMethod로 전달받은 Style Resource값을 TextView에 적용 setTextAppearance(resId)

2. Style Resource Return Property

val isTitleVisible: Boolea
	get() = title.isNotBlank()

val isMessageFont: Int
	get() = if(isTitleVisible) R.style.NotoRegularText else R.style.NotoMediumText

Title 존재 여부에 따라 Style을 동적으로 변경하기 위한 isMessageFont 프로퍼티 선언

존재 시 R.style.NotoRegularText / 미존재 시 R.style.NotoMediumText의 Style Resource 반

3. XML DataBinding

<androidx.appcompat.widget.AppCompatTextView
    ...
    ...
    bind:bindTextViewStyle="@{item.isMessageFont}" />

TextView의 BindingMethod 'bindTextViewStyle' 선언