美文网首页
Android动态换肤框架-换肤原理

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

作者: 码农的world | 来源:发表于2019-08-22 15:04 被阅读0次

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

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

    相关文章

      网友评论

          本文标题:Android动态换肤框架-换肤原理

          本文链接:https://www.haomeiwen.com/subject/ujynsctx.html