现在很多APP都有换肤的功能,例如微博,QQ等应用。这些应用的换肤原理是什么?

在用微博的时候,不难发现,当你要换肤时,先下载并安装一个皮肤apk,然后选择这个皮肤,就可以了。

这种方式就是把皮肤打包成一个APK,然后在主程序中访问这个皮肤APK中的资源。这种方式需要涉及到两个应用之间的数据访问了。

那如何做到应用间的数据访问呢?

这就得用到Android shareUserId这个属性了。通过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中.所以默认就是可以互相访问任意数据.

假设有一个应用叫main,一个皮肤APK叫skin,那么在main应用以及skin应用中的manifest.xml文件中需要设置shareUserId属性,都设置为cn.angrycode.main

在main应用的manifest.xml文件

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"      package="cn.angrycode.main"      android:versionCode="1"      android:versionName="1.0" android:sharedUserId="cn.angrycode.main">    <uses-sdk android:minSdkVersion="7" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">        <activity android:name=".Main"                  android:label="@string/app_name">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>

    </application></manifest>

   
  在skin应用中

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"      package="cn.angrycode.skin"      android:versionCode="1"      android:versionName="1.0" android:sharedUserId="cn.angrycode.main">    <uses-sdk android:minSdkVersion="7" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">

    </application></manifest>

这样在主应用中就可以通过代码进行设置皮肤

Context ctx =  createPackageContext("cn.angrycode.skin", Context.CONTEXT_IGNORE_SECURITY);layout.setBackgroundDrawable(ctx.getResources().getDrawable(R.drawable.bg));

这里还需要注意的是,主程序main中的资源路径以及资源名称要与skin应用中的资源路径以及资源名称要一致。例如,main主程序中的资源是 在\res\drawable-hdpi\bg.png,那么skin程序中的资源也必须在\res\drawable-hdpi\bg.png

转载于:https://www.cnblogs.com/Free-Thinker/p/3573391.html

Android APK方式换肤实现原理相关推荐

  1. Android三种换肤方案原理及Demo

    方案一:使用主题文件 定义换肤资源 在values/下新建一个xml文件,比如theme_attrs.xml,然后定义换肤的资源类型 <?xml version="1.0" ...

  2. Android App节日换肤

    Android App节日换肤 Android App节日换肤 1原理 2使用方式 1在XML中给需要换肤的控件添加tag属性 2在Activity中使用 3还有疑问吧 3示例图 比如支付宝,饿了么, ...

  3. android 状态栏 背景色_技术一面:说说Android动态换肤实现原理

    换肤分为动态换肤和静态换肤 静态换肤 这种换肤的方式,也就是我们所说的内置换肤,就是在APP内部放置多套相同的资源.进行资源的切换. 这种换肤的方式有很多缺点,比如, 灵活性差,只能更换内置的资源.a ...

  4. 网易云--手机QQ的换肤是怎么做到的,你对换肤有了解吗?看过换肤的原理没?

    面试官: 网易云QQ的换肤是怎么做到的,你对换肤有了解吗?看过换肤的原理没? 心理分析:没有接触过换肤技术 第一次听到该名词肯定会很茫然.面试官考的是对资源加载,监听布局,有没有了解.本文从换肤实战一 ...

  5. Android应用程序换肤实现系列(一)

    转载请标明出处:http://blog.csdn.net/EdisonChang/article/details/50021467 国内已经有很多android应用软件支持个性化皮肤定制功能,比如QQ ...

  6. Android模拟器的换肤和Android学习资料下载

          现如今,说到Android,不知者,可以说是寥寥无几,就连邻家小妹,也在玩Android.Android的火爆,足以看到移动市场可见一斑啊.移动市场的巨大空间,巨大商机,很多人都在蠢蠢欲动 ...

  7. Android插件化换肤

    Android插件化换肤 前言(废话) 今年是大年三十,今年怎么说呢,总体还是让自己感觉到比较满意的,但是有些时候还是感觉自己的自觉性不够.先贤曾经说过,君子慎独,愿明年的我能够铭记于心. 我这辈子最 ...

  8. 换肤功能原理及自定义组件化UI样式初步尝试

    只从UI工作开始向前端工作,我一直计划着开发一套属于自己的UI框架,网站通过拖拽点击,或输入布局代码,后台自动生成一套静态页面,从此前端工作仅需要补充各种排版即可,静态页面通过代码生成. 可能我上面的 ...

  9. Android dp方式的屏幕适配-原理(后期补充完整讲解)

    Android dp方式的屏幕适配-原理 传统所说的屏幕适配,其实是针对不同屏幕的UI尺寸适配,即在编写页面时使用了具体的dp.sp值后导致的其他问题. 我之前写过一些相关的文章和工具插件,也收到了很 ...

最新文章

  1. 深度学习要点———神经网络的类型
  2. python 顺序栈及基本操作
  3. Spring 中的 LocalSessionFactoryBean和LocalContainerEntityManagerFactoryBean
  4. 服务器上装filezilla server后,本地的ftp客户端连接不上去
  5. [转] TOUGH 的系列平面广告
  6. JS关键字和保留字汇总
  7. View的draw onDraw dispatchDraw顺序
  8. 服务提供者框架讲解 之 myJDBC
  9. SCU 4487 king's trouble I
  10. bitbake的原理介绍, 使用方法, 编译脚本的编写方法
  11. 怎样用计算机绘制幂函数图像,几何画板如何画幂函数的图像 绘制方法介绍
  12. 百度地图 实现 热力图
  13. rest api解决url参数中带点的问题,REST正则匹配
  14. 华为静态路由及默认路由的配置
  15. WM_CONTEXTMENU percolate upward
  16. 直播入口地址的数据库修改
  17. 5个文献免费下载神器
  18. 2020-10-18大二第七周
  19. C盘User下的中文名字修改为英文遇到的问题
  20. zabbix - 2

热门文章

  1. sdut 3341数据结构实验之二叉树二:遍历二叉树
  2. MATLAB中的分类器
  3. 鼠标马赛克图像部分区域
  4. matlab中reshape和repmat函数的用法
  5. 弹簧压缩 时间 matlab,用matlab解决弹簧振子摆动与时间的关系
  6. 【Linux+vscode】配置好秘钥之后还是不能ssh连接(离线配置)
  7. Maven下载依赖提示Missing artifact
  8. 注销凭证与自定义屏幕
  9. Android Studio2.3.3 提示找不到 jni.h
  10. Python 之 super MRO (没有遇到过适用场景)