gpt4 book ai didi

android - 如何在 Android 中使用数据绑定(bind)来绑定(bind) layout_width 和 layout_height

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:04:59 26 4
gpt4 key购买 nike

如果屏幕尺寸较小,我正在尝试绑定(bind)一个指示 ImageView 的 bool 值,因此如果我需要更多空间用于其他组件,它会缩小。我正在使用 DataBinding Library这样做。

我的布局的宽度和高度取决于这个 bool 值:

...
<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 不能接​​受类型 float。公平地说,我使用 BindingAdapter 类为布局属性创建一个 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);
}

@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 属性以便我可以使用尺寸直接使用数据绑定(bind)吗?

最佳答案

您应该添加一个默认值,即

android:layout_width="@{smallScreen ? @dimen/img_small_screen_size : @dimen/img_big_screen_size, default=wrap_content}"

关于android - 如何在 Android 中使用数据绑定(bind)来绑定(bind) layout_width 和 layout_height,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34863729/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com