개발/Android

[Android] Binding Adapter 쓰는 법

Patrick0422 2021. 11. 3. 12:04

Binding Adapter는 View(xml)에 직접 속성을 만들어 사용할 수 있게 해주는 기능입니다.

 

class RecipesRowBinding {
    companion object {
        
        @JvmStatic
        @BindingAdapter("속성 이름")
        fun applyVeganColor(view: View, isSomething: Boolean) {
            if (isSomething) {
                when (view) {
                    is TextView -> view.setTextColor(
                        ContextCompat.getColor(
                            view.context,
                            R.color.green
                        )
                    )
                    is ImageView -> view.setColorFilter(
                        ContextCompat.getColor(
                            view.context,
                            R.color.green
                        )
                    )
                }
            }
        }
        
    }
}

이런 식으로 클래스의 companion object 안에 @JvmStatic과 @BindingAdapter(속성 이름) 어노테이션을 붙인 함수를 만들어 사용합니다.

함수의 첫 번째 매개변수에는 속성이 적용될 뷰의 타입을 넣어주고, 그 뒤로 속성에서 사용할 변수들을 넣어주면 됩니다.

 

@JvmStatic
@BindingAdapter("loadImageFromUrl")
fun loadImageFromUrl(imageView: ImageView, imageUrl: String) {
    imageView.load(imageUrl) {
        crossfade(600)
    }
}

위 코드는 Coil 라이브리를 통해 이미지 뷰에서 호출하여 imageUrl로 넘어온 String 형태의 주소를 통해 이미지를 로드해주는 예시입니다.

@JvmStatic
@BindingAdapter("applyVeganColor")
fun applyVeganColor(view: View, vegan: Boolean) {
    if (vegan) {
        when (view) {
            is TextView -> view.setTextColor(
                ContextCompat.getColor(
                    view.context,
                    R.color.green
                )
            )
            is ImageView -> view.setColorFilter(
                ContextCompat.getColor(
                    view.context,
                    R.color.green
                )
            )
        }
    }
}

 

위 코드는 View를 받아서 View의 타입이 TextView인지 ImageView인지 구분하고, vegan 값에 따라 알맞은 색을 넣어주는 예시입니다.