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

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

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是私有的,可以通过反射,然后修改该参数值。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容