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

时间:2017-07-11 21:40:13

标签: java android android-databinding

databind layout_width或其他布局属性似乎不太直接。 如果我尝试直接绑定它,如android:layout_width="@{viewModel.heading3.width} - >它没有编译。

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

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

如何使用数据绑定实现由Model控制的textview高度和重量。我可以在代码后面尝试它,但对我来说,数据绑定方法似乎更适合我的场景。

感谢。

编辑: 正如我所说的那样,我的问题不同于:Android Data Binding layout_width and layout_height

我不打算从dimen xml读取Width值,我想从viewModel中读取它。这就是我的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"/>

此数据绑定仍无法正常工作。如果我仍然在建议的帖子中遗漏某些内容,请告诉我。

1 个答案:

答案 0 :(得分:1)

尝试使用float值,它会起作用

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

并在width中更改HeadingViewModel的数据类型。