目录
使用说明
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
一、预备知识
- AppCompatActivity实现
AppCompatActivity设置了一个委托,并给LayoutInflater设置了一个mFactory2. -
Android创建View全过程
LayoutInflater inflate View,如果Factory2不为null,会调用Factory2生成ViewAppCompatDelegateImpl实现了LayoutInflater.Factory2接口,创建AppCompatViewInflater来生成View。
-
AppCompatXXXView源码
体现了单一职责原则,背景相关的交给AppCompatBackgroundHelper去处理,将文字相关的交给AppCompatTextHelper处理.为什么系统控件可以在布局中声明时不加包名,而自定义控件必须要加包名呢?----看AppCompatViewInflater的源码,通过是否有.来判断是否是系统控件,然后自动拼接上前缀与加载控件类。
二、言归正传
1.预备知识与换肤的关系
参考源码,利用委托代理的方法,创建自定义的扩展了换肤功能的控件。
0 条评论