插件化换肤思路分析

插件化换肤思路分析

主要分为五步

1、收集xml数据
2、统计需要换肤的属性
3、制作apk皮肤包
4、读取皮肤包里面的皮肤
5、执行换肤

具体分析

1、利用View的实例化流程,自定义SkinLayoutflaterFactory。

2、①用SkinAttribute记录需要的属性:SkinPair记录一个属性,属性名字–对应的资源id、SkinView表示一个view对应多个属性,用一个List集合存储所有的SkinView、SkinAttribute存储一个xml对应的对个view,同样用一个List集合存储所有的SkinAttribute。然后调用方法public void look(View view,Attribute attrs)记录下view对应的属性。②然后进行apk皮肤包资源加载:
982 ContextImpl appContext = ContextImpl.createAppContext(mActivityThread, this)—>2268 ContextImpl context = new ContextImpl—>2270 context.setResources(packageInfo.getResources())—>951 mResources = ResourcesManager.getInstance().getResources(。。。)—>713 return getOrCreateResources(activityToken, key, classLoader)—>607 如果已经缓存就 ResourcesImpl resourcesImpl = findResourcesImplForKeyLocked(key)—>636 ResourcesImpl resourcesImpl = createResourcesImpl(key)—>338 final AssetManager assets = createAssetManager(key)—>279 assets.addAssetPath(key.mResDir)
该方法内调用native方法完成资源加载。

然后调用public void apply()来修改我们app的属性(这里属性的值应该来自皮肤包)。

3、直接生成一个无代码的APK文件即可。

4、用SkinManager中public void loadSkin(String skinPath)
读取资源包信息。

5、SkinManager通知SkinLayoutInflaterFactory更新UI。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值