①dataBinding在xml文件是支持import,可以導入java支持的包,所以也就可以進行簡單的運算,比如上面的xml中就用了三元運算符
動態設置顏色
android:textColor="@{user.vip? 0xffff0000:0xff000000}"
當導入的用戶是vip的時候,文本顏色會設置爲紅色,當不是vip的時候會顯示黑色
②而且支持java的字符串拼接
android:text="@{user.nickName + `(` + user.name +`)`}"
細心的網友肯定會發現,這個字符串拼接的時候用到的裏面不是單引號‘,而是一個數字鍵1左邊那個鍵`。
其中在dataBinding的xml文件中,是不支持雙引號中加單引號的,但是支持單引號中加雙引號,在雙引號中可以加`;
也可以把字符寫到String 文件中,賦值這樣寫
android:text="@{user.nickName + `@string/aa`}"
注意是@string
③細心的網友還會發現xml中有這樣一句話
android:text="@{user.nickName ?? user.name}"
這裏用了雙冒號??代表的意思是,如果user.nickName爲空,則顯示user.name,如果不爲空,則顯示nickName;
其中這句話等於 user.nickName == null ? user.name : user.nickName;
④既然這是xml佈局,大家肯定知道在xml中是不允許用<>的,用的話會被默認是標籤,那麼如果一定要用<>做比較表達式呢,這裏可以使用轉義來解決。
代碼中有這樣一句話:
android:textColor="@{user.level < 3 ? 0xff03bbf9 : 0xfff60bdb }
其中的< 代表的就是小於符號<,意思是如果用於等級小於3,則郵箱文本爲藍色,否則文本爲紫色。
⑤而我們實際運用中肯定也會有很多的點擊事件,那麼如何實現點擊事件的呢?
這就是我們爲什麼在dataBean實體類User中添加了兩個方法的原因
public void clickName(View view){
Toast.makeText(view.getContext(),"點擊了用戶名",Toast.LENGTH_SHORT).show();
}
這兩個方法其實不一定寫在實體類中,其實寫在其他類中也是可以的,不過我更推薦寫在實體類中,因爲觸發事件的時候,很有可能會用到實體類的其他屬性,寫在這裏面調用起來就變得比較輕鬆了。
然後再把事件和xml中綁定在一起
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="25sp"
android:onClick="@{user.clickName}"
android:textColor="@{user.vip? 0xffff0000:0xff000000}"
android:text="@{user.nickName + `(` + user.name +`)`}"/>
這個中間有onClick和onLongClick用於綁定。