在 XML 中使用 dp 的三元 Android 数据绑定(bind)宽度

标签 android android-layout android-databinding

我知道我可以使用@dimen/something...但想知道为什么这不起作用以及如何让它起作用。将帮助我理解数据绑定(bind)解析器的黑盒。

在我的 lineralayout 元素的 XML 中:

android:layout_width="@{DataBoundData.dis.equals(IN_PROGRESS) ? 60dp : 
     (DataBoundData.dis.equals(POSTED) ? 60dp : 0dp)}"

它在 60dp 的“p”上显示错误。我已经尝试了 60d\p 60dp 和其他一些但没有任何效果

最佳答案

要回答为什么 android:layout_width="@{60dp}" 不起作用的问题,这是因为数据绑定(bind)不理解 'dp' 的概念。

您已经为该属性创建了某种 BindingAdapter,否则它根本无法工作,因为默认情况下不支持 layout_width。也许你有这样的事情:

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

BindingAdapter 上没有指示 float width 是什么。它没有类型,因此无法将该知识传输到数据绑定(bind)系统中的常量。这与您必须使用的原因相同

android:visibility="@{View.INVISIBLE}"

代替

android:visibility="@{invisible}"

setVisibility() 上设置 int 值的上下文中没有 java 常量invisible

可以传入一个整数常量,例如60,它会对其进行赋值。不幸的是,这些是 LayoutParams 的像素,并且会在设备之间发生变化。

当您使用 @dimen/someDimension 时,数据绑定(bind)会在从资源中提取值时将维度转换为 float 。这很容易理解,因为 Resources.getDimension() 返回一个 float。同样,Resources.getColor() 返回一个整数,因此每次传递颜色资源时,您都会传递一个整数。

希望对您有所帮助。

关于在 XML 中使用 dp 的三元 Android 数据绑定(bind)宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46717253/

相关文章:

java - Android Studio 数据绑定(bind)错误,无法解析符号

android - 正确删除DocumentFile(尊重MediaStore)

android - 什么是 setContentView(R.layout.main)?

android - EditText setError 图标不起作用

android - 数据绑定(bind)将android资源绑定(bind)到后台

android - AgentDetailsActivityBindingImpl 类中所需的 DataBindingComponent 为空

java android 获取类

android - 如果在单独的 Activity 中发生更改,则不会触发 onSharedPreferenceChanged?

android - CoordinatorLayout 中的 ViewPager 意外收缩

java - 如何从另一个布局获取Edittext的内容