Android动态换肤框架实现小结

Android动态换肤框架实现小结

动态换肤的优点

  • 减少APK体积

  • 不需要更新apk就可以更新皮肤

  • 可以实时更换皮肤

整体实现流程

  1. 通过设置LayoutInflector.Factory2来监听View的创建过程,收集需要换肤的View和属性

  2. 加载皮肤包资源,将其封装成AssetManager和Resources

  3. 遍历需要换肤的View,通过原属性资源id获取资源名和类型,然后根据资源名和类型从皮肤包的Resources对象中取出最新的皮肤资源,并将新的资源应用到View上

实现细节

  • 收集需要换肤的View的过程是怎么样的?

    • 在解析xml布局文件时,会先调用LayoutInflactor.Factory2的创建View方法,如果返回null,则会走系统默认创建View方法,所以我们可以在Factory2中判断View是否包含自定义属性,根据自定义属性的值来决定要不要支持皮肤更新;

    • 如果不需要则返回null,需要则我们自己创建View,并应用皮肤包里最新的资源

    • 收集需要换肤的View时,我们需要保存它设置的属性和对应的值,然后根据属性的资源id,获取到对应的资源类型和资源名称,换肤时,根据资源名和类型去皮肤包对应的Resources对象中获取对应资源并应用到View上面

  • 如何加载皮肤包资源?

    通过反射构建AssetManager对象,并反射调用其addAssetPath方法将皮肤包所在路径添加进去,然后通过AssetManager构建新的Resources对象对皮肤包中的资源进行管理

你可能感兴趣的:(Android,架构设计,android)