在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的布局下面。什么是这个的语法,因为我在这里没有编译。我收到编译错误:
第二个@符号后预期的表达式
答案 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