当前位置: 首页 > article >正文

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对象对皮肤包中的资源进行管理


http://www.kler.cn/a/6521.html

相关文章:

  • Obfuscator使用心得
  • 【Leetcode 热题 100】124. 二叉树中的最大路径和
  • 基于微信小程序的乡村旅游系统
  • 了解RPC
  • 【机器人】机械臂位置、轨迹和转矩控制概要
  • Vue Web开发(十)
  • 射频接收机概述
  • PyTorch模型保存方法对比及其实现原理详解
  • 大数据领域的发展及其对现实世界的价值
  • BloombergGPT(LLM大模型用于金融科技)
  • Qt源码阅读(三) 对象树管理
  • java程序中常见的漏洞类型
  • 五 MySQL 存储过程
  • [jetson]pillow 报ImportError: The _imagingft C module is not installed
  • Unity游戏逆向及破解方法介绍
  • BUUCTF-逆向[GXYCTF2019]luck_guy1题解
  • day14—编程题
  • JVM垃圾回收——ZGC垃圾收集器
  • 【算法】树状数组维护总结
  • 计算机底层:循环冗余校验码CRC
  • 实验十八、测量运放的开环差模放大倍数
  • 实验二 配置Trunk和链路汇聚
  • 近世代数 笔记与题型连载 第八章(置换群)
  • Linux之进程替换
  • Octree(八叉树)
  • 【进阶C语言】指针和数组笔试题解析