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

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

一、共享进程运行的空间


通过在两个工程下的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技术,一起壮大我们的微信干货分享社区。

更多相关文章

  1. android动态加载资源
  2. Android导出与使用带资源的lib包
  3. 使用主题属性(?android:attr/android:textDisabledColor)
  4. Android(安卓)关于SVG矢量图支持
  5. Android(安卓)换肤之旅——主题切换
  6. Android学习路线总结,干货不多说
  7. android跨进程事件注入(程序模拟用户输入)
  8. android IBinder通信驱动(摘自《android深入浅出多媒体编程》)
  9. Android(安卓)Studio如何查看资源或者函数在哪些类中被引用

随机推荐

  1. Android之粘性广播理解
  2. Android Retrofit 源码系列(五)~ 设计模式
  3. Android判断当前网络是否可用--示例代码
  4. Android SDK安装,无法连接google
  5. Android UI(一)Layout 背景局部Shape圆角设
  6. Android必背内容(待续)
  7. Android利用程序实现GPS的打开或关闭
  8. Android ContentProvider和Uri详解 (绝对
  9. Android压缩图片到100K以下并保持不失真
  10. Android(安卓)源代码目录结构2- build