上一篇从零开始的Android新项目8 - Data Binding高级篇中,我们提到了使用Component来进行注入,以方便进行测试的功能,有一些朋友说写的不够清楚,还有些疑惑,所以本篇就来详细说说Component。
作为例子,我们的实现目标是使用Data Binding Component,让应用全局的TextView的文本都能随时变成test,还能进行全局换肤。
代码位于DataBindingSample里面的component包下。
DataBindingComponent接口
在build/intermediates/classes下面,可以找到DataBindingComponent类,包名为android.databinding,全局只会有一个该类——此接口在编译时生成,包含了所有用到的实例BindingAdapters的getter方法。
当一个BindingAdapter是一个实例方法(instance method),一个实现该方法的类的实例必须被实例化。这个生成的接口会包含每个声明BindingAdapter的类/接口的get方法。命名冲突会简单地加一个数字前缀到get方法前来解决。
如果使用Dagger 2,开发者可以继承这个接口,并把继承的接口注解为Component。
对应的接口有:
- setDefaultComponent(DataBindingComponent)
- inflate(LayoutInflater, int, ViewGroup, boolean, DataBindingComponent), inflate一个binding layout并返回新创建的binding
- bind(View, DataBindingComponent), 根据给定的layout root返回binding,如果没有则创建
第一个接口全局起作用,后两个接口仅对该语句inflate的布局起作用。
创建Component
声明抽象adapter
如果不需要实现多个Component,可以直接跳过这一步。
我们声明一个抽象的adapter,在其中写上抽象方法来设置我们想要做data binding的属性,这里我们直接干掉了TextView的android命名空间下的text和textColor两个属性。

本文详细介绍了Android的Data Binding Component,通过实例展示了如何创建和使用Component实现全局TextView文本修改及换肤功能。通过声明抽象adapter、实现adapter和component,然后在layout中注入并重新创建activity,从而实现动态效果。Component的应用不仅限于换肤,还可以用于打点、替换原生属性等,鼓励读者探索更多可能性。
最低0.47元/天 解锁文章
2381

被折叠的 条评论
为什么被折叠?



