Android ImageView将srcCompact绑定到布尔变量

时间:2017-01-16 16:24:47

标签: android data-binding android-databinding

我刚刚发现如何将变量绑定到xml文件,第一次这很难,但它确实加快了工作。

如何将变量绑定到imageView,以便 如果vabiable(boolean)从true变为false,ImageView SrcCompact也会发生变化?

<ImageView
    android:layout_width="48dp"
    android:layout_height="48dp"
    app:srcCompat="@drawable/ic_bluetooth_indigo_a400_48dp"
    android:id="@+id/imageView"
    android:layout_alignParentTop="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:layout_margin="20dp" />

这是我的 Imageview 代码,BlueTooth徽标为蓝色。 我想将其绑定到&#34; BluetoothEnable &#34;布尔值,如果&#34; BluetoothEnable &#34;去&#34; FALSE &#34;我希望 imageView 显示 SrcCompact ,其中蓝牙徽标为红色

1 个答案:

答案 0 :(得分:1)

如果有人遇到这种情况,我想分享一些解决方案。

当我尝试使用三元表达式时,它对我不起作用:

<ImageView
    ...

    app:srcCompat="@{isBluetoothEnabled? @drawable/ic_bluetooth_green : @drawable/ic_bluetooth_red}"

    ... />

因此,我尝试了绑定适配器方法。
在这里,我创建了一个绑定适配器,该适配器将收到isBluetoothEnabled的布尔值,然后根据它选择合适的可绘制图像:

public class BindingAdapters {

    @BindingAdapter("app:bluetoothBasedSrc")
    public static void setSendState(ImageView v, boolean isBluetoothEnabled) {
        int drawableRes = isBluetoothEnabled ? R.drawable.ic_bluetooth_green : R.drawable.ic_bluetooth_red;
        v.setImageResource(drawableRes);
    }

}

在这里,我们如何在ImageView中使用该绑定适配器:

<ImageView
    ...

    app:bluetoothBasedSrc=@{isBluetoothEnabled}
    tools:srcCompat="@drawable/ic_bluetooth_green"

    ... />

希望该解决方案有助于解决这种情况。