Android换肤功能实现

概述

由于Android 没有提供一套统一的换肤机制,我猜可能是因为国外更注重功能和体验的原因
所以国内如果要做一个漂亮的换肤方案,需要自己去实现。
目前换肤的方法大概有三种方案:
(1)把皮肤资源文件内置于应用程序Apk的资源目录下,这种方案最简单,但是导致apk安装包比会比比较大,而且不好管理
(2)将皮肤资源文件打包成zip的资源文件方式提供,该方法也比较多被采用。
(3)将皮肤图片资源以独立的Apk安装包的方式提供,做成插件化的方式。便于管理。
本文主要讨论第三种实现。

数据共享条件

  1. 有相同签名
  2. AndroidManifest.xml中配置android:sharedUserId有相同的属性值
    满足以上条件,两个apk就能互相访问数据了。

实现方式

1、应用程序和皮肤程序的AndroidManifest.xml中配置

android:sharedUserId="com.yee"

2、应用apk与皮肤apk中对同一功能的皮肤文件名要一致

例如:应用apk的图片路径:\res\drawable-hdpi\XX.png

皮肤apk中的图片文件路径也应该是:\res\drawable-hdpi\XX.png

3、获取皮肤资源

Java代码

Context context = createPackageContext("com.yee.skin", Context.CONTEXT_IGNORE_SECURITY);

获取到皮肤包com.yee.skin对应的Context,通过返回的context对象就可以访问到皮肤apk包com.yee.skin中的任何资源。

在应用apk中要获得皮肤apk中的buttonbackground.png的代码如下

Java代码

Drawable drawable = context.getResources().getDrawable(R.drawable.buttonbackground);

你可能感兴趣的:(Android换肤功能实现)