【发布时间】:2016-01-16 19:59:16
【问题描述】:
在 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 布尔值为真,我想将按钮布局在名为 adone 的布局下方,否则将其放在名为 title_main 的布局下方。这是什么语法,因为我在这里没有编译。我得到一个编译错误:
第二个@符号之后的表达式
【问题讨论】:
-
尝试从两个选项中删除
+符号,给你@{@bool/showAds ? @+id/adone : @+id/title_main},看看是否有效。您需要在实际视图本身的 ID 上添加+符号。 -
感谢您的帮助,实际上developer.android.com/reference/android/widget/… 说我需要“+ 号”,但我还是删除了它,然后我收到“错误:(119, 33) 找不到设置器参数类型为 int 的属性 'android:layout_below'。”所以看起来它把它看作一个 int 。顺便说一句,应用你的 cmets 后它看起来像这样: android:layout_below="@{@bool/showAds ? @id/adone : @id/title_main}"
-
某处需要
+,最好是在ID 的第一次出现时。我的猜测是数据绑定表达式语言无法处理定义新 ID,这就是为什么删除+会让您前进。下一个测试:@{@id/adone}。如果编译成功(尽管它不会给你想要的东西),那么三元运算符不知何故失去了这些是 ID 资源的事实。如果这不能编译,那么它可能与RelativeLayout.LayoutParams属性有关。 -
我可以在没有 elvis 运算符的情况下执行 if 条件吗? “下一个测试”也不起作用。当我这样做时,它无法将其识别为表达式。
-
那么我认为问题不在于操作员,而在于
layout_below,但这只是我有根据的猜测。
标签: android data-binding