前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Scoops android app多主题架构(五)

Scoops android app多主题架构(五)

作者头像
用户1263308
发布2018-02-01 18:26:32
6830
发布2018-02-01 18:26:32
举报
文章被收录于专栏:代码GG之家代码GG之家

原理分析 核心代码位置 https://github.com/52inc/Scoops/tree/master/scoops/src/main/java/com/ftinc/scoop 可以看到主要文件

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 重新启动当前界面,实现切换。

编译插件

https://github.com/52inc/Scoops/tree/master/scoops-compiler 主要目的是解析我们自定义的注解。解析的主要是我们在初始化时候使用addToppings加入的我们的注解。 找到后,解析出来注解的标记值,切换过场特效,和适配器。 标记值的目的是更新值的时候,用这个来做区分。

代码逻辑:找到所有的绑定在这个标记的view,然后逐个调用对应的适配器,进行对应的颜色更新。 我们来看下核心的bind函数

我们看下bind 代码,主要看下getViewBinder这个方法即可。继续去看 findViewBinderForClass 函数

代码主要流程为: 从缓存能找到,直接返回。 找不到,然后查找Class.forName(clsName + "_ToppingBinder")类,构造一个,然后将这个返回,并缓存下来。然后调用里面的bind进行关联view 我们反编译可以看到MainActivity_ToppingBinder.smali这个smali文件,这个就是插件生成出来的代码。 我们反编译下,看下这个文件做了什么。

看到了吧,将注释的全部归类进来,为后面更新的时候查找使用。 注释的就是如此了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 代码GG之家 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档