上周有个朋友给建议说讲讲换肤吧,真巧这周公司的工作安排也有这个需求,换的地方之多之繁,让人伤神死了。
正所谓磨刀不误砍柴工,先磨下刀,抽出一个工具类。写了个关于换肤的简单demo。
Android中换肤的实现有几种方法。我使用的是读取共享进程空间还有一apk中的资源的方法。
大致的原理例如以下。让你的app和一个仅仅有资源文件的app执行在同一进程中。这样你的app就能够訪问还有一app的资源了。原理非常easy。以下我们分步骤解说实现过程。
一、共享进程执行的空间
通过在两个project下的manifest根节点加入同样的android:sharedUserId属性值,再者通过同一签名文件打包,保证两个app的签名值一样,这样app就能执行于同一进程中了。这个是资源文件共享的前提。
二、抽象实现资源共享的工具类
依据ReflectionUtil的方法区我们能够看到,它的作用有三个:getSkinContext基于包名构建一个Context的实例;getIdentifier则是基于包名、资源目录名、资源名获取相应的资源id;最后color、drawable等方法是依据包名、资源名,返回可直接使用的资源值。
三、使用实例
使用起来有点麻烦,当大量资源须要替换的话。编码会很麻烦。那看以下简单的办法
今天的文章比較短,大家如有好的想法或者其它换肤好的实现,请私信我,我会在以下几天整理后继续为大家介绍。
源代码地址:https://github.com/JackCho/SkinChangeDemo
假设认为对你有所帮助,欢迎大家订阅我的微信公众账号——Android干货分享(ID:android_share)。以下是微信的二维码,为你提供及时高质的Android干货。技术交流QQ群:318588906,欢迎大家加群。共同探讨下Android和Java技术。一起壮大我们的微信干货分享社区。