使用XML中的dp的三维Android数据绑定宽度

JPM*_*JPM 2 android android-layout android-databinding

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

在我的XML for lineralayout元素:

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

它在60dp的'p'上显示错误.我已经尝试过60d\p 60dp和其他几个并没有任何效果

Geo*_*unt 5

要回答为什么android:layout_width="@{60dp}"不起作用的问题,这是因为数据绑定不理解'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);
}
Run Code Online (Sandbox Code Playgroud)

BindingAdapter没有任何迹象表明它是什么float width.它没有类型,因此无法将该知识传递给数据绑定系统中的常量.这是你必须使用的原因

android:visibility="@{View.INVISIBLE}"
Run Code Online (Sandbox Code Playgroud)

代替

android:visibility="@{invisible}"
Run Code Online (Sandbox Code Playgroud)

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

可以传入一个整数常量60,它将分配它.不幸的是,这些是LayoutParams的像素,并且在设备之间发生变化.

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

希望有所帮助.

  • 是的,它可以工作,但它将是像素而不是dp.也许适用于原型设计,但对于实际应用来说并不是很好. (2认同)