当前位置: 移动技术网 > IT编程>移动开发>Android > Android实现换肤的两种思路分析

Android实现换肤的两种思路分析

2019年07月24日  | 移动技术网IT编程  | 我要评论

环太平洋 高清,横踏黑道,浙江卫视中国好舞蹈

本文分析了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中的资源。

希望本文所述对大家android程序设计有所帮助。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网