Android实现换肤功能(一)

上周有个朋友给建议说讲讲换肤吧,真巧这周公司的工做安排也有这个需求,换的地方之多之繁,让人伤神死了。正所谓磨刀不误砍柴工,先磨下刀,抽出一个工具类,写了个关于换肤的简单demo。 android

Android中换肤的实现有几种方法,我使用的是读取共享进程空间另外一apk中的资源的方法。大体的原理以下,让你的app和一个只有资源文件的app运行在同一进程中,这样你的app就能够访问另外一app的资源了。原理很简单,下面咱们分步骤讲解实现过程。 git

1、共享进程运行的空间 github


经过在两个工程下的manifest根节点添加相同的android:sharedUserId属性值,再者经过同一签名文件打包,保证两个app的签名值同样,这样app就能运行于同一进程中了。这个是资源文件共享的前提。 微信

2、抽象实现资源共享的工具类 app

根据ReflectionUtil的方法区咱们能够看到,它的做用有三个:getSkinContext基于包名构建一个Context的实例;getIdentifier则是基于包名、资源文件夹名、资源名获取对应的资源id;最后color、drawable等方法是根据包名、资源名,返回可直接使用的资源值。 工具

3、使用实例 编码

使用起来有点麻烦,当大量资源须要替换的话,编码会很是麻烦。那看下面简单的办法 spa

今天的文章比较短,你们若有好的想法或者其余换肤好的实现,请私信我,我会在下面几天整理后继续为你们介绍。 .net


源码地址:https://github.com/JackCho/SkinChangeDemo orm

若是以为对你有所帮助,欢迎你们订阅个人微信公众帐号——Android干货分享(ID:android_share)。下面是微信的二维码,为你提供及时高质的Android干货。技术交流QQ群:318588906,欢迎你们加群,共同探讨下Android和Java技术,一块儿壮大咱们的微信干货分享社区。

相关文章
相关标签/搜索