我如何使用 LiveData 和 BindingAdapter 更改按钮 marginEnd?

How i can change button marginEnd with LiveData and BindingAdapter?

如何使用 LiveData 和 BindingAdapter 更改按钮 marginEnd? 我在 ViewModel 中的 LiveData: var marginRight = MutableLiveData(R.dimen.default_margin)

我的维度 <dimen name="default_margin">141dp</dimen>

我的属性:android:layout_marginEnd="@{viewmodel.marginRight}"

在这种情况下我得到

Cannot find a setter for <android.widget.Button android:layout_marginEnd> that accepts parameter type 'androidx.lifecycle.MutableLiveData<java.lang.Integer>'
If a binding adapter provides the setter, check that the adapter is annotated correctly and that the parameter type matches.

您的 MutableLiveData 中有 dimen id 而不是 dimen 值,但我认为您不能在 xml 中这样做,因为视图没有边距设置器。您可以使用 MarginLayoutParams 在代码中完成此操作。

上网查了下才知道没有setter保证金。它帮助了我:

实时数据:

var marginRight = MutableLiveData(R.dimen.margin_right_default)

我的绑定适配器:

    @JvmStatic
    @BindingAdapter("app:marginRight")
    fun setMarginRight(view: View, marginResource: Int){
        val resources = view.context.resources
        val params = view.layoutParams as ViewGroup.MarginLayoutParams
        params.setMargins(0,0, resources.getDimension(marginResource).toInt(), 0)
        view.layoutParams = params
    }

我的属性:

app:marginRight="@{viewmodel.marginRight}"