Android换肤的两种思路

了解换肤实现及不同方案的差异和使用场合。

一、从功能上划分

1) 软件内置多个皮肤,用户不能修改;

2) 官方提供皮肤下载,用户使用下载的皮肤;

3) 官方提供皮肤制作工具或方法,用户自制皮肤。

二、皮肤定义

软件皮肤包括图标、字体、布局、交互风格等,换肤就是换掉皮肤包括的部分或所有资源。

三、皮肤与APP分离

1)打包皮肤文件

默认格式是apk。例如Launcher,它的桌面皮肤格式是一个apk;

自定义的格式为zip。例如墨迹天气皮肤扩展名是mja,搜狗输入法的皮肤扩展名是sga,它们的文件格式实际上都是zip。

四、资源访问

1)apk格式

apk之间读取数据的条件是:有相同签名并且AndroidManifest.xml中配置android:sharedUserId有相同的属性值,这样两个apk运行在同一个进程中,就能互相访问数据了。

方法如下:

a) 应用程序和皮肤程序的AndroidManifest.xml中配置

例如: android:sharedUserId="com.zj"

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

例如:应用程序的背景图片路径:\Skin\res\drawable-hdpi\XX.png

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

c)访问资源的方法

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

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

例如:应用apk要获得皮肤apk中的bg.png,

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

这样就得到了图片的引用,其他xml资源文件的获取方式也是类似的。

2)自定义扩展名的zip格式的皮肤

重点:读取zip文件中的资源以及皮肤文件存放策略。

方案:如果每次启动都读取SD卡上的皮肤文件,就会影响APP执行速度。最好是提供设置皮肤的界面,把用户选择的皮肤文件解压缩到皮肤路径下,这样不需要跨存储器读取,速度较快,而且不需要每次都去zip压缩包中读取,不依赖SD卡中的文件,就算皮肤压缩包被删除了也不会影响。

实现方法:

a) 在软件的帮助或者官网的帮助中提示用户将皮肤文件拷贝到SD卡指定路径下。

b)在软件中提供皮肤设置界面。可以在菜单或者在设置中。可参考墨迹、搜狗输入法、QQ等支持换肤的软件。

c)加载指定路径下的皮肤文件,读取其中的缩略图,在皮肤设置界面中显示,将用户选中的皮肤文件解压缩到皮肤路径下。

d)APP优先读取皮肤路径下的资源。如果没有则使用apk中的资源。

更多相关文章

  1. Android(安卓)studio 快捷键,解决返回上次浏览位置ctrl+alt+left/
  2. Android两个项目整合成一个
  3. Android用户空间的处理及移植需要注意的情况
  4. 查看Android(安卓)API文档的正确方式
  5. Android菜单详解(五)——使用XML生成菜单
  6. Android(安卓)提示Your project contains error(s),please fix t
  7. Android(安卓)如何在Eclipse中查看Android(安卓)API源码 及 supp
  8. Android手机软件汉化教程---第二课 arsc文件汉化
  9. Android(安卓)Studio和Gradle使用不同位置JDK的问题(Android(安

随机推荐

  1. android_checkBox自学
  2. android 是否是平板屏幕——至少约720x96
  3. Android(安卓)Binder机制(3) 本地服务注
  4. android中的json包
  5. Android(安卓)UI---自定义形状shape
  6. Android不想要第三方的library的权限的时
  7. android 2.0读取联系人
  8. android动态显示和隐藏status bar(通知栏)
  9. android代码实现免提功能
  10. Android /data/data/app_file/目录下面安