Android dataBinding - 如何在xml中获取View的资源ID

时间:2016-01-16 19:59:16

标签: android data-binding

在Android Studio中,我的数据绑定本身可以正常运行。我有一个像这样定义的布尔值:

<resources>
    <bool name="showAds">false</bool>
</resources>

在layout.xml文件中我想引用这个布尔值(工作正常)但我想根据这个布尔值分配一个id。让我告诉你我想要实现的目标:

我有一个在relativeLayout标签中的按钮,根据这个布尔值,我想重新定位按钮。所以我有这个:

<Button
   android:id="@+id/startButton"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:textSize="64dip"
   ****************
   android:layout_below="@{@bool/showAds ? @+id/adone : @+id/title_main}"
   ****************
   android:layout_centerHorizontal="true"
   android:textColor="#0080FF"
   android:text="@string/start_btn_title" />

看看我想做什么?如果showAds boolean为true,我想在布局下面布置一个名为adone的布局,否则将它放在名为title_main的布局下面。什么是这个的语法,因为我在这里没有编译。我收到编译错误:

  第二个@符号

后预期的

表达式

1 个答案:

答案 0 :(得分:1)

上述问题与How to get dimensions from dimens.xml

中的问题相同

LayoutParams个属性都没有内置支持。正如链接文章中所回答的那样,LayoutParams的数据绑定被认为太容易滥用,因此它被排除在内置BindingAdapters之外。你没有滥用它,所以你应该添加自己的。

@BindingAdapter("android:layout_below")
public static void setLayoutBelow(View view, int oldTargetId, int newTargetId) {
    RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams)
        view.getLayoutParams();
    if (oldTargetId != 0) {
        // remove the previous rule
        layoutParams.removeRule(RelativeLayout.BELOW);
    }
    if (newTargetId != 0) {
        // add new rule
        layoutParams.addRule(RelativeLayout.BELOW, newTargetId);
    }
    view.setLayoutParams(layoutParams);
}

另外,绑定语法中的@ + id / adone不会创建id。您应该在“查看您绑定到。

”中创建ID