学习笔记,整理中;
回忆上一节:
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里面初始化),在调用的地方做加载皮肤并调用,通知观察者做换肤处理。