您的位置:首页 > 游戏 > 手游 > 【Android】自定义换肤框架04之Skinner框架设计

【Android】自定义换肤框架04之Skinner框架设计

2024/12/29 2:21:06 来源:https://blog.csdn.net/u013718730/article/details/140227926  浏览:    关键词:【Android】自定义换肤框架04之Skinner框架设计

到上一章为止,我们已经完整讲解了换肤所用到的所有技术点

这一章,我们来梳理下,如何从整体和细节上,进行代码设计

毕竟,我们不止是简单实现功能,要做到功能清晰,使用灵活

文章目录

          • 核心组件
          • 使用约定
          • 关于SkinnerProvider
          • 设计过程中要注意的细节
          • End

核心组件
  • SkinnerResources,用于代替默认Resources,根据皮肤和模式加载资源

  • SkinnerInflaterFactory,用于代替默认LayoutInflater创建View

  • SkinnerProvider,用于对已创建的View进行换肤,主要是根据Attribute和Skin设置对应Resource

  • SkinnerProvidersFactory,管理默认SkinnerProvider,和自定义SkinnerProvider

  • SkinnerKit,提供SkinnerSDK对外调用接口,主要是init/install/load

  • SkinnerValues,定义SkinnerValues常量

  • SkinnerCompatActivity,非必须组件

    提供createContentView/initContentView/reloadContentView等生命周期方法,方便换肤后重载布局

使用约定
  • 支持skin和mode两种属性搭配使用,比如同一种皮肤,有深色模式和浅色模式
  • 需要换肤的资源,名称以_skinnable结尾的资源,不符合此条件的资源,意味着不需要跟随换肤变化
  • 同一个皮肤需要支持多种模式时,在res下面添加新的以_skinnable_mode的资源即可,框架会根据mode自动切换
  • 默认只对background,src,textColor三个最常用的属性进行换肤,其它属性可通过自定义Provider配置
关于SkinnerProvider
  • 目前所有换肤框架,均无法做到对所有控件,所有属性,进行自动换肤,这是Android自身技术限制所致
  • 不同换肤框架最大的区别就是在于,如何适配所有控件,所有属性
  • SkinnerProvider的设计初衷,在于将换肤适配代码,与xml/view/activity完全解耦
  • 这样大家不管是集成Skinner框架,还是以后移除Skinner框架,对项目代码都没什么改动
  • 自定义SkinnerProvider,请参考BasicAttributeSkinner#hookView方法
  • 自定义Provider需要通过SkinnerProvidersFactory注册,并且在xml中通过skin:provider属性表明使用哪个provider
  • 多个Provider通过空格隔开即可
设计过程中要注意的细节
  • 当皮肤包不存在,资源不存在,或反射被禁用时,要能自动切换到默认的Resource
  • 支持在使用过程中换肤,重新调用setContentView后生效
  • 支持自动保存和加载上次的皮肤设置
  • 如果同一套skin有多个mode的话,最好是新建一个res-mode文件夹来存放资源,方便管理
  • provider根据需要来使用,一是提升性能,二是防止多个provider功能有交集
End

本期到此为止,下一章我们给出最终教程和源码

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com