android高级ui03-插件化换肤

学习笔记,整理中;

回忆上一节:

1、setcontentview中的instaldecore是做初始化phonewindow,和创建项目时的一些xml文件

2、inflate才是初始化自己的xml文件

3、皮肤包的基础类 skinattribute 皮肤属性工具类;skinpreferance 皮肤存储类,下次用;skinviewsupport接口,支持自定义view的。

4、代码准备放github. qingyoukz

-------------------------------

自己整理思路:

一、思路

1、实现源码LayoutInflater.Factory2的实例化,抄源码创建view并记录。

2、实现接口 Application.ActivityLifecycleCallbacks;监听activity的生命周期操作;在activity oncreated里面处理工厂注册和观察者注册。

3、skinmanager:被观察者,做初始化操作(在application里面初始化),在调用的地方做加载皮肤并调用,通知观察者做换肤处理。

4、通过apk的方式替换资源id 来实现换肤。

二、lib插件包

1、utils-skinresources:宿主和插件的id获得和id调用转换

2、utils-skinthemeutils:更新系统资源,注意activity.getWindow().setStatusBarColor...

3、skinpreference:记录换肤apk目录路径

4、skinviewsupport:接口,用于自定义view实现此接口,可以在skinattribute中换肤函数调用

5、skinattribute,提供记录一个activity所有view需要换肤的属性函数和换肤函数

6、skinlayoutinflaterfactory:实现源码LayoutInflater.Factory2中factory2;仿照源码创建view,并且记录需要换肤的view属性。

7、applicationactivitylifecycle:实现接口 Application.ActivityLifecycleCallbacks;监听activity的生命周期操作,在activity oncreated里面处理更新状态栏;注册skinlayoutinflaterfactory;activity作为被观察者注册观察者skinlayoutinflaterfactory

8、skinmanager:被观察者,做初始化操作(在application里面初始化),在调用的地方做加载皮肤并调用,通知观察者做换肤处理。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容