如何使用数据绑定将 layout_width 值与 ViewModel 绑定
How can I bind layout_width value with ViewModel using databinding
数据绑定 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);
}
如何使用数据绑定实现由模型控制的文本视图高度和重量。我可以在后面的代码中尝试它,但对我来说数据绑定方法似乎更适合我的场景。
谢谢。
编辑:
正如我所建议的那样,但我的问题不同于:
我不打算从 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"/>
这个数据绑定仍然不起作用。如果我在建议的线程中仍然遗漏某些内容,请告诉我。
尝试使用 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);
}
并在您的 HeadingViewModel
中更改 width
的数据类型。
数据绑定 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);
}
如何使用数据绑定实现由模型控制的文本视图高度和重量。我可以在后面的代码中尝试它,但对我来说数据绑定方法似乎更适合我的场景。
谢谢。
编辑:
正如我所建议的那样,但我的问题不同于:
我不打算从 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"/>
这个数据绑定仍然不起作用。如果我在建议的线程中仍然遗漏某些内容,请告诉我。
尝试使用 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);
}
并在您的 HeadingViewModel
中更改 width
的数据类型。