转载请标明出处:http://blog.csdn.net/EdisonChang/article/details/50021467
国内已经有很多android应用软件支持个性化皮肤定制功能,比如QQ,墨迹天气、360手机助手等。android 原生系统并没有提供专门的换肤api,这一点可能与不同使用人群的文化差异有关。
譬如一些国外的app在页面设计上都比较简洁,更注重功能;而国内一些好的应用会在风格设计和交互上加入更多的情感因素,注重体验和交互功能,换肤就是其中一种实现手段。
换肤,可以简单的认为就是动态的改变应用资源,包括改变图片、颜色、文字、尺寸等。小至调用View的setTextColor 方法简单改变不同场景下的字符串颜色,大至android rom UI库的定制等,都属于换肤的范畴。
那么文章要讨论的换肤属于哪个层次呢?文章要讨论的换肤是针对应用程序的动态换肤,不涉及到Rom的UI定制。在写android应用的换肤系列之前,博主参考了很多相关的资料和别人的优秀的经验,加上自己的理解和整理优化,希望能给有相关需要的朋友带来帮助。
这个换肤系列内容比较多,我会按不同的实现方式分成几部分进行介绍,本节主要是介绍目前Android应用程序采用的几种主流换肤方式和相关的一些特点:
(1)资源内置,通过android原生主题来实现程序的内部换肤功能
优点:发挥android 主题style换肤特点,切换便捷 ,在布局文件上就可以根据主题选择不同资源,覆盖面广,基本不需要额外的代码配置;
缺点:灵活度低,如果需要实现多套皮肤方案,需要同时内置,会增大安装包体积,不易扩展
(2)皮肤由压缩包形式提供,动态替换本地资源,这种实现,实际上是程序本身对压缩包资源做了解析,在程序运行时动态替换皮肤
优点:灵活度高,用户可以个性化定制皮肤,程序只负责解析,不需要内置皮肤文件;
缺点:所有资源都是通过代码读取并解析,效率上会比较差,更容易导致内存溢出
(3)皮肤文件以apk格式应用存在,共享进程方式读取资源,同样需要安装,主程序通过包名读取皮肤apk资源并动态替换
优点:不需要程序解析资源文件,效率比较快
缺点:皮肤制作困难,需要和主Apk有同样的签名,使用时资源id必须保持一致,否则读取不到对应的资源文件
(4)皮肤文件以插件apk,宿主apk动态加载
优点:不需要有签名限制,降低了程序的耦合性;
缺点:基于共享进程读取apk资源的改进版,虽然没有签名限制,但其他弊端依然存在
实际应用中可以根据场景合理择取方法,甚至可以是不同换肤方案的组合方式,灵活实现换肤。对文章内容有兴趣,请继续关注换肤系列的第二篇。