使用说明

https://blog.csdn.net/ximsfei/article/details/54586827

https://www.it610.com/article/1283394586596622336.htm (除activity外的自定义控件换肤)

注意的点:
- module里也需要换肤的话,需要指定皮肤所在的目录sourceSets


- 不支持DataBinding

换肤原理

https://blog.csdn.net/ximsfei/article/details/54604310 (原作者)

https://blog.csdn.net/xfhy_/article/details/81253817

https://www.jianshu.com/p/89cc39dcc127?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation (非常详细的分析)

一、预备知识
  • AppCompatActivity实现
    AppCompatActivity设置了一个委托,并给LayoutInflater设置了一个mFactory2.

  • Android创建View全过程
    LayoutInflater inflate View,如果Factory2不为null,会调用Factory2生成View

    AppCompatDelegateImpl实现了LayoutInflater.Factory2接口,创建AppCompatViewInflater来生成View。

  • AppCompatXXXView源码
    体现了单一职责原则,背景相关的交给AppCompatBackgroundHelper去处理,将文字相关的交给AppCompatTextHelper处理.

    为什么系统控件可以在布局中声明时不加包名,而自定义控件必须要加包名呢?----看AppCompatViewInflater的源码,通过是否有.来判断是否是系统控件,然后自动拼接上前缀与加载控件类。

二、言归正传
1.预备知识与换肤的关系

参考源码,利用委托代理的方法,创建自定义的扩展了换肤功能的控件。

2.源码1-创建控件
3.源码2-资源加载
三、框架原理图


0 条评论

发表回复

您的电子邮箱地址不会被公开。