APP动态换肤⽅案详解
换肤背景
⽤户体验是衡量⼀款APP质量的重要考核点,⽽换肤则是提升⽤户体验的重要⼀环。换肤包括但不限于APP主动更换主题(⽐如根据春节、圣诞、元旦等节假⽇更换节⽇主题)、局部页⾯换肤(⽩天夜间模式切换、阅读页⾯字体颜⾊的调整)、APP⽤户⾃定义⽪肤的编辑等等。这些在现如今的主流APP上都能到⾝影,甚⾄iOS系统在iOS13之后就已经提供了暗⿊模式以⽤于换肤的实现。实现换肤⽅案需要考虑的要点主要包含以下⼏⽅⾯:
换肤元素
换肤最终体现在视觉层⾯的表现⼀般是:图⽚、字体、颜⾊的改变,当然也可能包括布局排版、动画特效的变动,但后两者涉及的需求场景较少,所以不在本⽂的讨论范围内。
⽪肤资源管理
⽪肤包内会包含图⽚、颜⾊⾊值、字体包等各种⽪肤资源,它们是构成换肤的最底层要素,能够便捷有效地管理⽪肤资源是实现换肤⽅案中的重要⼀环。⽪肤资源管理具体包括如何在尽可能减少开发量的情况下快速更换⽪肤资源打包⽣成不同样式的渠道包,APP内存在多套内置⽪肤资源⼜应该怎样管理,能
否在APP不升级发版的情况下在线更新⽪肤等等。
换肤框架的易⽤性
开发者引⼊换肤框架是否会增加额外⼤量的⼯作量,换肤框架提供的API接⼝复不复杂,换肤框架与原有项⽬的耦合性⾼不⾼…...这些都是设计⼀款换肤⽅案需要考虑的要点。
去美国留学怎么办
换肤类型一汽大众有哪些品牌
根据换肤⽅式的不同,主要分为两类。
本地换肤
APP所能⽀持的换肤资源在APP打包初始化时就已确定,安装之后不能再动态下载更新,如果更新必须重新打包送审,其中最具代表性的便是iOS13之后系统⽀持的暗⿊与明亮模式。当然也可以在打包时提前将多套⽪肤资源内置到APP资源包中,后⾯再由接⼝控制⽪肤切换。本地换肤的缺点是换肤不够灵活,并且包的体积过⼤,还依赖苹果审核。
远程换肤
换肤资源由接⼝下发,下发后可选择为增量更新或者是等全部图⽚⽪肤资源下载完成后再全局换肤。⾄于⽪肤资源的下载时机则可以根据业务的实际需要设计为⽤户主动点击触发,或者读取后台配置⾃动更新。
现有换肤⽅案分析
分析市⾯上已有换肤⽅案的实现,⼤概分为以下⼏类。
1、分类(Ca tego r y)
张云龙王一菲恋情叶可儿在分类中增加扩展属性,并⽤扩展属性来设置⽪肤样式,⽐如给UILabel增加扩展属性skin_textColor,该属性可以根据当前⽪肤主题读取对应的⽂本颜⾊⽤以显⽰,使⽤时弃⽤系统原有的textColor,改⽤skin_textColor来设置样式。这种⽅案的不⾜点是需要对所有的UI控件以及每⼀个控件对应的UI属性都进⾏分类重写,这样的⼯作量是巨⼤的,⽽且换肤⽅案没法覆盖那些⾃定义的UI组件,因为你⽆法预知⾃定义UI组件的样式是怎样的。另⼀⽅⾯开发者引⼊换肤框架后还得对所在项⽬代码进⾏⼤量修改,毕竟你得将系统原有的样式属性设置改为扩展属性后换肤才会⽣效。
木森个人介绍
换肤资源管理
换肤资源使⽤ CJSkin.plist ⽂件(⽂件名固定)来配置管理换肤信息。如下图所⽰:当前项⽬的CJSkin.plist⽂件内记录了default、skin1、skin2三个⽪肤包,每个⽪肤包内固定包含Color、Image、Font(颜⾊、图⽚、字体)三类⽪肤元素的信息。
不同⽪肤包 Color 字典中的key相同值不同:⽐如default⽪肤包中 导航背景⾊ 值为0x996666,skin2⽪肤包中 导航背景⾊ 的值为
0x454545。
Image 的说明同理,⽐如default和skin2⽪肤包中都有 顶部图⽚ ,但分别指向了不同的url;另外不同⽪肤包的图⽚还可以放到各⾃的default.bundle、skin1.bundle⽂件夹内,同时在CJSkin.plist中声明图⽚别名,⽐如skin1.bundle中包含图⽚top.png,它在CJSkin.plist的配置为“ 顶部图⽚ : top.png ”。
Font 的配置说明也是⼀样,不同⽪肤包的key相同,值为包含Name、Size两个固定key的字典,Name为空则使⽤系统默认字体,Size表⽰了字号⼤⼩。
跑男4阵容公布CJSkin.plist
新建⽪肤资源管理⼯具类 CJSkinTool,通过它可以便捷获取当前⽪肤包下的资源信息。