#前言#android
前几篇已经DataBinding的基础用法已经介绍的差很少了,因此接下来感觉一下DataBinding强大的高级功能。bash
#正文#app
DataBinding能够经过注解,实现不少强大的功能,而且十分的方便,可以帮助咱们省去大量的对xml进行操做的代码,例如加载图片,字符串处理等等操做。ide
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@{@string/app_name}"/>
@BindingConversion
public static Drawable convertStringToDrawable(String str){
return new ColorDrawable(Color.parseColor("#344567"));
}
复制代码
分析上面的代码,在xml中设置ImageView的背景是@{@string/app_name},里面设置的居然是字符串,若是是正常使用由于属性类型不匹配,确定是要报错的,可是利用了@BindingConversion,就能够帮助咱们实现默认的类型转换。工具
从功能上看,咱们须要把一个String类型转换成Drawable类型,因此在任意的工具类中,建立一个以参数为String类型,返回值为Drawable类型的方法,最关键是的是别忘了@BindingConversion注解,帮助咱们与DataBinding进行绑定,DataBinding会自动在绑定的方法中找到符合要求的方法进行转换。测试
在定义对象(Bean)中,最多见的就是Setter和Getter方法,DataBinding能够帮助咱们为自定义属性自动设置Setter方法。ui
首先,DataBinding一个不得不说的强大之处,不须要在styleable-declare中声明就能够使用他须要的自定义属性,使用方法和日常的自定义属性同样,只须要在root标签中,定义命名空间。spa
先看代码:3d
<ImageView
android:layout_width="200dp"
android:layout_height="200dp"
app:imageDrawable="@{@drawable/ic_launcher}"
android:background="@{@string/app_name}"/>
复制代码
在xml中使用了一个历来没见过的imageDrawable属性,可是不会报错,运行结果看图: code
ImageView显示了@drawable/ic_launcher 对应的图片,这是为何呢?
由于DataBinding会自动为imageDrawable在ImageView中寻找对应的setter方法,也就是setImageDrawable(),若是这个方法不存在确定就要报错了。其余的属性也能够经过一样的方式来直接在xml中设置想要的属性值。
@BindingMethods({ @BindingMethod(type = "android.widget.ImageView", attribute = "android:tint", method = "setImageTintList"), })
ImageView在xml 中的android:tint 属性 和setImageTintList()是相对应的,可是在方法命名上并非符合Setter的规则,这样就能够利用@BindingMethods 来重命名对应的setter方法。
特别注意,这一句须要加载类的最上面,在import 下面。
上面这个例子是系统自带的,我的感受实战中可能接触的并很少。
我的感受这个功能应该是用的最多的,经过@BindingAdapte就能够直接为自定义属性定制本身的实现方法。
<ImageView
android:layout_width="200dp"
android:layout_height="200dp"
app:image="@{@drawable/ic_launcher}"
android:background="@{@string/app_name}"/>
@BindingAdapter("bind:image")
public static void loadImage(ImageView image, Drawable resId){
image.setImageDrawable(resId);
}
复制代码
首先在工具类中建立一个setter方法,这个方法至少须要一个参数,就是View自己,而后绑定自定义属性。
上面的loadImage方法,绑定的是image属性,其中绑定的格式就是 “bind:xxx”, 若是要绑定多个属性,之间用英文的逗号隔开,例如@BindingAdapter("bind:image" , "bind:test" ),在xml若是须要使用这个方法直接在指定的View设置image属性。
大部分咱们想在ide中预览效果,例如看看textView的位置,文字颜色大小等是否满意,可是使用了DataBinding个就会变得不方便,因此DataBinding直接提供了设置默认值的功能
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.firstName, default=test}"/>
复制代码
语法就是在完整的属性值最后用英文的逗号隔开, 加上default=xxxx, 注意这个默认值是不能加上引号的。
特别注意:通过测试,目前DataBinding暂不支持使用@mipmap下的图片。
#总结#
介绍到这里,DataBinding的各类功能的使用就算是圆满的结束了,代码也很是的简单,可是必定要本身亲自在电脑上敲一敲才能感觉到DataBinding的神奇。
下一篇准备写一写还有哪些知识点没有介绍到,再好好的深化一下概念。