赞
踩
减少APK体积
不需要更新apk就可以更新皮肤
可以实时更换皮肤
通过设置LayoutInflector.Factory2来监听View的创建过程,收集需要换肤的View和属性
加载皮肤包资源,将其封装成AssetManager和Resources
遍历需要换肤的View,通过原属性资源id获取资源名和类型,然后根据资源名和类型从皮肤包的Resources对象中取出最新的皮肤资源,并将新的资源应用到View上
收集需要换肤的View的过程是怎么样的?
在解析xml布局文件时,会先调用LayoutInflactor.Factory2的创建View方法,如果返回null,则会走系统默认创建View方法,所以我们可以在Factory2中判断View是否包含自定义属性,根据自定义属性的值来决定要不要支持皮肤更新;
如果不需要则返回null,需要则我们自己创建View,并应用皮肤包里最新的资源
收集需要换肤的View时,我们需要保存它设置的属性和对应的值,然后根据属性的资源id,获取到对应的资源类型和资源名称,换肤时,根据资源名和类型去皮肤包对应的Resources对象中获取对应资源并应用到View上面
如何加载皮肤包资源?
通过反射构建AssetManager对象,并反射调用其addAssetPath
方法将皮肤包所在路径添加进去,然后通过AssetManager构建新的Resources对象对皮肤包中的资源进行管理
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。