【android学习笔记】BindingAdapter自定义View参数

BindingAdapter自定义View-layout参数

有的时候,在layout.xml中写出一个view后,全部的参数都得写进activity/fragment里面,导致代码大量重复且冗余,要是能像layout中写view的id、layout_width、layout_height一样,直接在这里定义就方便了,所以BindingAdapter就出现了,它可以允许自定义layout中view的参数,不用把所有东西都写进业务逻辑里面

定义说明

就定义来说,只需要保证以下格式即可:

@BindingAdapter("visibility") // 定义自定义参数
fun setVisibility(view: View, visible: Boolean) { // 方法名没有要求,参数列表要求,第一个参数为对应View类型,剩下参数为绑定的参数类型
    view.visibility = if (visible) View.VISIBLE else View.GONE // 方法内逻辑
}

但是仅保持格式也不行,还有两点要求:

  • 把该方法放在类外,需要保证在顶部
  • 若不在类外,需要保证该方法所在类是顶部object类且添加 @JvmStatic 描述方法

另外,如果要一次性绑定布置一个参数,可以这么写,其中 requireAll 是定义这些多参数是否必须一起使用:

@BindingAdapter(value = ["param1", "param2"], requireAll = true)
fun setParam(view: View, isParam1: Boolean, param2: String) {
    // 逻辑实现
}

使用说明

就是很正常的layout使用,以下为上面两次定义的例子:

<com.google.android.material.button.MaterialButton
    android:id="@+id/bt_example"
    android:layout_weight="1"
    style="@style/Widget.Material3.Button.OutlinedButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="我是例子"
    app:visibility="true" /> <!-- 这个就是可见 -->


<TextView
    android:id="@+id/text_example"
    android:layout_weight="1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="我是例子"
    app:param1="true" <!-- 两者一起使用 -->
    app:param2="我不是例子" />
posted @ 2026-07-20 14:02  _Scaley  阅读(15)  评论(2)    收藏  举报