布局中的算术运算 - Android数据绑定

Daw*_*yży 6 android android-layout android-databinding

我正在尝试在数据绑定中使用算术运算:

<Space
    android:layout_width="match_parent"
    android:layout_height="@{2 * @dimen/button_min_height}" />
Run Code Online (Sandbox Code Playgroud)

不幸的是我得到了:

Error:(47, 47) must be able to find a common parent for int and float 
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Rav*_*avi 14

因为你正在进行int * float操作,2是int价值并且@dimen/button_min_height会给你float价值.但是只android:layout_height接受float价值.

您可以像这样创建自定义绑定方法:

public class Bindings {
    @BindingAdapter("android:layout_height")
    public static void setLayoutHeight(View view, float height) {
       ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
       layoutParams.height = (int) height;
       view.setLayoutParams(layoutParams);
    }
}
Run Code Online (Sandbox Code Playgroud)

并在您的xml代码中

android:layout_height="@{(float)2 * @dimen/activity_vertical_margin}"
Run Code Online (Sandbox Code Playgroud)

将2转换为float所以它不会给你任何投射错误.

从上面的代码中,您将得到RunTimeException : You must supply a layout_height attribute.,为了解决该错误,提供default价值layout_height

android:layout_height="@{(float)2 * @dimen/activity_vertical_margin, default=wrap_content}"
Run Code Online (Sandbox Code Playgroud)

请参阅官方文档的default属性的概念,或者您也可以参考这个答案,以及