【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="我不是例子" />

BindingAdapter自定义View-layout参数
浙公网安备 33010602011771号