<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data class=".BindConversion">
<import type="org.loader.app4.Student" />
<import type="android.graphics.Bitmap" />
<variable
name="isColor"
type="boolean" />
</data>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<View
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@{isColor?@color/gray:@color/blue}" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="coding" />
</LinearLayout>
</layout>
这里看到background设置的应该是Drawable的,这里直接传入了R.color.gray值也是可以的,
因为databinding里面提供了转化了,在databinding库里面的Converters.java文件中:
public class Converters {
@BindingConversion
public static ColorDrawable convertColorToDrawable(int color) {
return new ColorDrawable(color);
}
@BindingConversion
public static ColorStateList convertColorToColorStateList(int color) {
return ColorStateList.valueOf(color);
}
}
(2)现在我们想实现如果传入一个字符串类型的颜色值,放到android:background中。
<View
android:layout_marginTop="30dp"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@{isColor?@string/gray:@string/blue}" />
<string name="gray">#e6e6e6</string>
<string name="blue">#00008b</string>
public class DefineConverters {
/**
* 将字符串颜色值转化为ColorDrawable
* @param colorString 如:#ff0000
* @return
*/
@BindingConversion
public static ColorDrawable convertColorToDrawable(String colorString) {
int color = Color.parseColor(colorString);
return new ColorDrawable(color);
}
}
这样子我们就可以实现传递字符串颜色值,就可以了。