【问题标题】:Android dataBinding - how to use bool resource to trigger visibility of layoutAndroid dataBinding - 如何使用 bool 资源来触发布局的可见性
【发布时间】:2023-03-28 19:25:01
【问题描述】:

我目前在 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">

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

【问题讨论】:

    标签: android data-binding


    【解决方案1】:

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

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

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

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

    【讨论】:

    【解决方案2】:

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

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

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

    那么你可以简单地使用

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

    【讨论】:

    • 你知道制作其中两个的方法吗?在可见和消失之间进行选择的一种。另一个在可见和不可见之间进行选择。
    • 好问题。我不认为它可以使用普通的 android:visibility 工作,因为我不知道它如何知道要选择哪个转换
    • 当 BindingConversion 或 BindingMethod 似乎有点受限时,请使用 BindingAdapter。您可以生成自己的属性。例如:将 android:visibility 与 BindingConversion 一起用于可见 / 消失,并将 android:invisible 作为 BindingAdapter,您实际上在其中执行 view.setVisibility(theBoolean);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    相关资源
    最近更新 更多