搜索
您的当前位置:首页正文

Scoops android app多主题架构(五)

来源:二三娱乐

原理分析

Flavor.java 存储每个主题信息Scoop.java 主文件,主要提供接口,作为对外调用。SugarCone.java 解析注释的主文件,通过使用bind方法,去反射找到编译出来的Toppings类,通过这个来关联上来。Topping.java 自定义注释方法。标记在属性上面,然后通过编译时候,使用插件scoops-compiler,生成后缀为Toppings的绑定类,随后我们使用bind函数,将这些类和界面关联起来。
关键方法

Scoop.apply函数


我们来看下public void apply(Activity activity)的具体代码流程找到当前的主题getCurrentFlavor 判断主题是否是白天夜间模式,如果是,设置模式然后使用

另一个apply方法,参数是activity和主题id设置主题,找到设置的背景色,设置窗体背景,然后返回去,我们自己recreate 重新启动当前界面,实现切换。
编译插件

代码逻辑:找到所有的绑定在这个标记的view,然后逐个调用对应的适配器,进行对应的颜色更新。我们来看下核心的bind函数
我们看下bind 代码,主要看下getViewBinder这个方法即可。继续去看findViewBinderForClass 函数
代码主要流程为:从缓存能找到,直接返回。找不到,然后查找Class.forName(clsName + "_ToppingBinder")类,构造一个,然后将这个返回,并缓存下来。然后调用里面的bind进行关联view我们反编译可以看到MainActivity_ToppingBinder.smali这个smali文件,这个就是插件生成出来的代码。我们反编译下,看下这个文件做了什么。 看到了吧,将注释的全部归类进来,为后面更新的时候查找使用。注释的就是如此了。
Top