Android 在 XML 中使用 dp 的三元数据绑定宽度
Android Databinding width with ternary using dp in XML
我知道我可以使用@dimen/something...但想知道为什么这不起作用以及如何让它起作用。将帮助我理解数据绑定解析器的黑盒。
在我的 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}"
不起作用的问题,是因为数据绑定不理解'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
是什么。它没有类型,因此无法将该知识传输到数据绑定系统中的常量。这与您必须使用
的原因相同
android:visibility="@{View.INVISIBLE}"
而不是
android:visibility="@{invisible}"
在 setVisibility()
上设置 int 值的上下文中没有 java 常量 invisible
你可以传入一个像60
这样的整数常量,它会分配给它。不幸的是,这些是 LayoutParams 的像素,并且在设备之间会发生变化。
当您使用 @dimen/someDimension
时,数据绑定会在从资源中提取值时将维度转换为浮点数。这很容易理解,因为 Resources.getDimension()
returns 一个 float
。同样,Resources.getColor()
returns 是一个整数,所以每次传递颜色资源时,都会传递一个整数。
希望对您有所帮助。
我知道我可以使用@dimen/something...但想知道为什么这不起作用以及如何让它起作用。将帮助我理解数据绑定解析器的黑盒。
在我的 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}"
不起作用的问题,是因为数据绑定不理解'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
是什么。它没有类型,因此无法将该知识传输到数据绑定系统中的常量。这与您必须使用
android:visibility="@{View.INVISIBLE}"
而不是
android:visibility="@{invisible}"
在 setVisibility()
invisible
你可以传入一个像60
这样的整数常量,它会分配给它。不幸的是,这些是 LayoutParams 的像素,并且在设备之间会发生变化。
当您使用 @dimen/someDimension
时,数据绑定会在从资源中提取值时将维度转换为浮点数。这很容易理解,因为 Resources.getDimension()
returns 一个 float
。同样,Resources.getColor()
returns 是一个整数,所以每次传递颜色资源时,都会传递一个整数。
希望对您有所帮助。