Android动态换肤框架-换肤原理

2019-08-22  本文已影响0人  码农的world

注:下文源码有删减,截图只体现主流程

1、换肤原理

换肤就是替换资源(文字、颜色、图片等),而换肤基本有两种模式:一是内置换肤(在Apk包中存在多种资源(图片、颜色值)用于换肤时候切换。自由度低,apk文件大,一般用于没有其他需求的日间/夜间模式app);二是动态换肤(通过运行时动态加载皮肤包)。Android页面加载是因为setContentView(),所以第一步看看setContentView源码到底是怎么实现设置一个布局ID就能显示页面的(注:这里分析AppCompatActivity的setContentView方法,Activity的setContentView方法会不同)。

2、AppCompatActivity.java

1

3、AppCompatDelegateImplV9.java

2

注:使用LayoutInflater布局加载器将布局文件加载到contentParent中

4、LayoutInflater.java

3

注:获取到一个Resources对象,获取到xml解析器XmlResourceParser,解析布局文件

4

注释1:通过解析器获取一个节点名,比如我们布局文件的的一个TextView节点。

注释2:获取到根View

注释3:解析所有子view

5

注释1:通过mFactory2创建view;

注释2:创建系统自带的view;

注释3:创建自定义view(自定义view带了点)

6

注释1 获取到View的Class对象。

注释2 通过反射获取到View的构造方法。

注释3 通过构造函数创建View。

7

注意:setFactory2只能设置一次,否则会报异常。所以我们在自定义Factory2的时候,需要重新设置mFactorySet的值(设置mFactorySet为false)。因为mFactorySet是私有的,可以通过反射,然后修改该参数值。

上一篇 下一篇

猜你喜欢

热点阅读