https://blog.csdn.net/u011418943/article/details/106863899
github:https://github.com/LillteZheng/ZSkinPlugin
此框架应该是借鉴了下面的框架:
博文:
https://zhuanlan.zhihu.com/p/113124163
github地址:https://github.com/fengjundev/Android-Skin-Loader
目录
框架源码分析
一、设置Factory2
定义ZSkinContenProvider,利用Application的registerActivityLifecycleCallbacks方法监测各个activity的生命周期给activity注入Factory2。
ZSkin.inject(activity);
二、自定义的Factory2
SkinFactory
相当于一个代理类,代理Factory2的onCreateView方法。通过拦截原始的Factory2创建出的View,通过SkinManager->parseSkinAttr方法
方法对View的属性作替换。
SkinManager->parseSkinAttr方法
遍历View的attrs,tags过滤(配置tag,减小遍历的属性。)
将遍历到的View的attrs与View关联缓存起来
根据特定的属性,调用对应的Delegate设置View的属性。
三、插件换肤
将Assets下的皮肤插件拷贝到应用内的文件目录下
利用插件包生成新的Resources实例
注意:插件包的资源文件名称要和宿主的资源文件的名称一致
四、应用内换肤
就是维护资源名字,一般皮肤资源单独新建res_后缀名的资源文件夹,需要配置build.gradle
sourceSets { main { res.srcDirs = ['src/main/res', 'src/main/res_white'] } }
0 条评论