Java 如何使用数据绑定将layout_width值与ViewModel绑定

Java 如何使用数据绑定将layout_width值与ViewModel绑定,java,android,android-databinding,Java,Android,Android Databinding,数据绑定布局宽度或其他布局属性似乎不是很直接。 如果我尝试像android:layout_width=“@{viewModel.heading3.width}->那样直接绑定它,它不会编译 在添加如下所示的绑定适配器后,它会抛出运行时异常以提供布局宽度 @BindingAdapter("android:layout_width") public static void setLayoutWidth(View view, int width) { ViewGroup.LayoutP

数据绑定布局宽度或其他布局属性似乎不是很直接。 如果我尝试像android:layout_width=“@{viewModel.heading3.width}->那样直接绑定它,它不会编译

在添加如下所示的绑定适配器后,它会抛出运行时异常以提供布局宽度

    @BindingAdapter("android:layout_width")
public static void setLayoutWidth(View view, int width) {
    ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
    layoutParams.width = width;
    view.setLayoutParams(layoutParams);
}
如何使用数据绑定实现模型控制的textview高度和重量。我可以在代码隐藏中尝试,但对我来说,数据绑定方法似乎更适合我的场景

谢谢

编辑: 正如我所建议的,我已经通过了,但我的问题不同于:

我不打算从dimen xml中读取宽度值,我想从viewModel中读取它

public class HeadingViewModel {
public HeadingViewModel(String heading, int width) {
    this.heading = heading;
    this.width = width;
}

String heading;
int width;

public String getHeading() {
    return heading;
}

public int getWidth() {
    return width;
}
然后我现在尝试使用默认值,如下所示:

<TextView
    android:layout_width="@{viewModel.heading1.width, default=match_parent}"
    android:layout_height="50dp" android:text="@{viewModel.heading1.heading}" android:id="@+id/heading"
    android:background="@android:color/holo_blue_light"/>


但此数据绑定仍不起作用。如果建议的线程中仍缺少某些内容,请通知我。

使用
浮点值尝试,它将起作用

@BindingAdapter("android:layout_width")
public static void setLayoutWidth(View view, float width) {
    ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
    layoutParams.width = (int)width;
    view.setLayoutParams(layoutParams);
}

并更改
宽度的数据类型
在您的
HeadingViewModel

Reference@RaviRupareliya中也更改它。如果您仍然认为这是重复的,请告诉我。谢谢。您能建议我们为什么必须从int转换为float,然后再转换回来吗?我也在想同样的问题,首先我尝试了
int
,但出现了一个错误ys
您必须指定属性layout\u width
。所以我想尝试一下
float
,它成功了