我正在尝试绑定一个布尔值,如果屏幕尺寸很小,它会指示 ImageView,因此如果我需要更多空间用于其他组件,它会缩小。我正在使用DataBinding 库来执行此操作。
我的布局,其宽度和高度取决于此布尔值:
...
<data>
...
<variable name="smallScreen" type="boolean"/>
...
</data>
...
<ImageView
android:layout_width="@{smallScreen ? @dimen/img_small_screen_size : @dimen/img_big_screen_size}"
android:layout_height="@{smallScreen ? @dimen/img_small_screen_size : @dimen/img_big_screen_size}"
android:layout_gravity="center_horizontal"
android:contentDescription="@{message}"
android:src="@{image}"
android:scaleType="center"
tools:src="@drawable/img_message_private"/>
...
如果我只是尝试像这样构建我的项目,编译器会说 layout_width 不能接受浮点类型。很公平,我使用 BindingAdapter 类为布局属性创建一个浮动输入,如下所示:
...
@BindingAdapter("android:layout_width")
public static void setLayoutWidth(View view, float width) {
ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
layoutParams.width = (int) width;
view.setLayoutParams(layoutParams);
}
@BindingAdapter("android:layout_height")
public static void setLayoutHeight(View view, float height) {
ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
layoutParams.height = (int) height;
view.setLayoutParams(layoutParams);
}
...
这允许我的项目构建。但是当布局最终被渲染时,我陷入了以下异常:
java.lang.RuntimeException: Binary XML file line #21: You must supply a layout_width attribute.
仅供参考,我的尺寸以 dp 为单位设置,如下所示:
<dimen name="img_small_screen_size">100dp</dimen>
<dimen name="img_big_screen_size">208dp</dimen>
有人知道如何覆盖 layout_width 属性,以便我可以直接使用数据绑定,使用维度?