Android dataBinding - 如何使用bool资源触发布局的可见性

j2e*_*nue 11 data-binding android

我目前在android中有一个bool.xml文件,如下所示:

   <?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="showAds">true</bool>
    </resources>
Run Code Online (Sandbox Code Playgroud)

现在我有一个使用数据绑定的layout.xml文件.我想基于上面定义的布尔showAds来显示或隐藏adView的可视性.到目前为止我有这个:

  <com.google.android.gms.ads.AdView
        android:id="@+id/adView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
android:visibility="@{@bool/showAds ? View.Visible:View:gone}"
        ads:adSize="BANNER"
        ads:adUnitId="ca-app-pub-1234567/34343">
Run Code Online (Sandbox Code Playgroud)

但它没有编译.如何获取布尔值来决定广告是否应该显示?语法错误.

Roh*_*rma 29

更正条件的语法View.Visible:View:gone

android:visibility="@{@bool/showAds ? View.VISIBLE:View.GONE}"
Run Code Online (Sandbox Code Playgroud)

并且您需要在数据部分中导入View:

<data>
    <import type="android.view.View"/>
</data>
Run Code Online (Sandbox Code Playgroud)


Til*_*ill 13

如果您不喜欢添加View导入(在需要的每个布局中),您只需定义带@BindingConversion注释的方法:

@BindingConversion
public static int convertBooleanToVisibility(boolean visible) {
    return visible ? View.VISIBLE : View.GONE;
}
Run Code Online (Sandbox Code Playgroud)

带注释的方法可以在项目中的任何Java文件中.

然后你可以简单地使用

android:visibility="@{@bool/showAds}"
Run Code Online (Sandbox Code Playgroud)