Support Vector Drawableについて
Vector Drawable対応そのものについては以下の資料が非常に参考になりますのでよくわからない方は御覧ください。
Data Bindingについて
Data Bindingについては、Android Developersの公式ガイドを御覧ください。
本題
問題
Data Bindingガイドを読むと、drawableをandroid:src="@{@drawable/image}"
のように指定するかと思います。
そのあと、Support Vector Drawable対応しようとしてapp:srcCompat="@{@drawable/image}"
とreplaceすると、ビルドに失敗します。
Cannot find the setter for attribute 'app:srcCompat' with parameter type android.graphics.drawable.Drawable.
Drawableのsetterがapp:srcCompatにないと言われます。
解決方法
まず、当該xmlにcom.example.R
をimportします。com.exapmle
の部分は適宜Package名に置き換えてください。
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="com.example.R" />
.....
</data>
....
</layout>
drawableの指定方法をapp:srcCompat="@{R.drawable.image}
のように変更します。
最後に適当なクラスのstaticメソッドとしてsrcCompatのBindingAdapterを定義します。
@BindingAdapter("srcCompat")
public static void srcCompat(ImageView view, int resourceId) {
view.setImageResource(resourceId);
}
以上でビルドして利用することができます。
ちなみに、上記の場合はdrawableが固定なのでData Bindingを使わなくてもよくて、実際にはこのような時に効果が発揮されます。
app:srcCompat="@{item.isA ? R.drawable.imageA : R.drawable.imageB}"