2016-01-16 7 views
8

Al momento ho un file bool.xml in Android che assomiglia a questo:Android Databinding - come utilizzare risorse bool per attivare la visibilità di aspetto di

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

Ora ho un file layout.xml che utilizza l'associazione dati. Voglio mostrare o nascondere la visibilità di un adView in base a uno showAd booleano definito sopra. Finora ho questo:

<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"> 

ma non viene compilato. come posso convincere il booleano a decidere se mostrare o meno l'annuncio? La sintassi è sbagliata.

risposta

23

Correggere la sintassi delle condizioni View.Visible: Vista: andato

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

e avete bisogno di importare Visualizza nella sezione dati:

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

Dove può questo '' essere tag found? – wutzebaer

+0

@wutzebaer Si crea il tag di dati annidato sotto il tag . Vedere l'impostazione del binding dei dati qui; https://developer.android.com/topic/libraries/data-binding/index.html – opt05

+0

hi l'espressione sembra non funzionare anche se passo il valore andato direttamente 'android: visibility =" @ {0x00000008} "' the la vista non è ancora andata – wutzebaer

11

Se non piace l'aggiunta della vista importazione (in ogni layout ove necessario), si può semplicemente definire un metodo @BindingConversion annotato:

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

Il metodo annotato può essere in qualsiasi file Java nel progetto.

Poi si può semplicemente utilizzare

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

Conosci un modo per fare due di questi? Uno che sceglie tra visibile e andato. Un altro che sceglie tra visibile e invisibile. – bboybz

+0

Buona domanda. Non penso che potrebbe funzionare usando il normale Android: visibilità poiché non saprei come potrebbe sapere quale conversione scegliere – Till

+0

Quando un BindingConversion o un BindingMethod sembra un po 'limitato, usa un BindingAdapter. È possibile generare i propri attributi. Ad esempio: usa 'android: visibility' con BindingConversion per visible/gone e' android: invisible' come BindingAdapter dove effettivamente fai il comando 'view.setVisibility (theBoolean);' –