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

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

<?xml version="1.0" encoding="utf-8"?> <resources> <bool name="showAds">true</bool> </resources> 

现在我有一个使用数据绑定的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"> 

但它不编译。 我怎样才能得到布尔值来决定广告是否显示?语法是错误的。

Solutions Collecting From Web of "Android dataBinding – 如何使用布尔资源触发布局的可见性"

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

 android:visibility="@{@bool/showAds ? View.VISIBLE:View.GONE}" 

你需要在数据部分导入View:

 <data> <import type="android.view.View"/> </data> 

如果您不喜欢添加视图导入(在需要的每个布局中),您可以简单地定义一个@BindingConversion批注的方法:

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

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

那么你可以简单地使用

 android:visibility="@{@bool/showAds}"