-
换肤内容:资源文件、图片、字体、文字颜色、等等
-
换肤思路
- 知道xml的View 怎么解析的?? ---》
- 如何拦截系统的创建流程? setFactory2 可以拦截 --- aop的思路去实现
- 拦截后怎么做?? 重写系统的创建过程的代码(复制)
- 收集View以及属性 每个Activity的View 及属性都需要收集
- 创建皮肤包 -- apk
- 如何使用??只用插件的res(插件的 java、res)
- 系统的资源是如何加载的? Resources、Assetmanager
- 通过Hook技术,创建一个Assetmanager 专门加载皮肤包的资源
- 通过 反射 addAssetPath 方法放入皮肤包的路径 从而得到 加载皮肤包资源的 Assetmanager
- 首先通过 app的资源id --》 找到 app的资源name --》 皮肤包的资源id
- 技术要点: 观察者模式、aop、Hook技术
换肤流程
布局创建流程
如何从一个XML创建出对应的View对象,完成布局加载?
- 1、根据资源ID获得XML数据,进行XML解析
- 2、根据XML解析的节点(View的名称)创建对象
- 3、解析节点中的属性设置对象属性
系统实例化 view 流程
系统能获得每一个View对象,我们如何获得?
换肤
资源加载
实际上,Resources 类也是通过 AssetManager 类来访问那些被编译过的应用程序资源文件的,不过在访问之前,它会先根据资源 ID 查找得到对应的资源文件名。 而 AssetManager 对象既可以通过文件名访问那些被编译过的,也可以访问没有被编译过的应用程序资源文件。