2016-07-16 63 views
3

隨着數據綁定,我們現在經常看到的代碼在佈局文件是這樣的:語法中的Android XML佈局條件語句

<Variable name="displayIt" type="Boolean"/> 

再後來:

android:visibility="@{displayIt ? View.VISIBLE : View.GONE}" 

(當然android.view.View必須先導入View.VISIBLE和View.GONE纔有意義)

這使得控制視圖變得更容易。 它也告訴我,XML佈局允許使用條件語句,但它看起來像我的google-fu很弱,我嘗試過並找不到這種語法。 如果我想使用文字怎麼辦?就像:

android:text="{@isValid ? "valid" : "invalid"}" 

(是的,我知道這是一個愚蠢的做法,我只是在談論這裏的語法)。 或者資源ID是什麼?可能是這樣的:

android:color="@{isValid ? R.color.green : R.color.red}" 

可以這樣做嗎?什麼是適當的語法?

+1

無顯示看起來是正確的。例如,'View.GONE'在xml中沒有任何意義。該選項應該是經過編輯澄清的'gone' –

+0

的字符串。字符串如'gone'或'visible'將不起作用。 – htwu

回答

9

用於調用數據綁定語句正確的語法看起來像"@{<some expression>}",等等三元條件是

"@{bool ? ifTrue : ifFalse}" 

在那兩個值將是你通常會放入(不帶引號)值沒有數據綁定的XML。

例如

android:color="@{isValid ? @color/green : @color/red}" 

或者

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

而且

android:visibility="@{isVisible ? View.VISIBLE : View.GONE}" 

這兩者在這些選項的data binding documentation

+0

可見性它會'android:visibility =「@ {displayIt?visible:gone}」'right ?? –

+0

對我很好。沒有保證它的工作 –

+0

@ cricket_007感謝您快速回答。我只是試過,'「@ {isValid?@ color/green:@ color/red}」'是正確的語法; '「@ {displayIt?visible:gone}」'不是。 – htwu