本文分析了Android实现换肤的两种思路。分享给大家供大家参考,具体如下:
这里来了解换肤实现及不同方案的差异和使用场合。
一、从功能上划分
1) 软件内置多个皮肤,用户不能修改;
2) 官方提供皮肤下载,用户使用下载的皮肤;
3) 官方提供皮肤制作工具或方法,用户自制皮肤。
二、皮肤定义
软件皮肤包括图标、字体、布局、交互风格等,换肤就是换掉皮肤包括的部分或所有资源。
三、皮肤与APP分离
1)打包皮肤文件
默认格式是apk。例如Launcher,它的桌面皮肤格式是一个apk;
自定义的格式为zip。例如墨迹天气皮肤扩展名是mja,搜狗输入法的皮肤扩展名是sga,它们的文件格式实际上都是zip。
四、资源访问
1)apk格式
apk之间读取数据的条件是:有相同签名并且AndroidManifest.xml中配置android:sharedUserId有相同的属性值,这样两个apk运行在同一个进程中,就能互相访问数据了。
方法如下:
a) 应用程序和皮肤程序的AndroidManifest.xml中配置
例如:
b) 文件与应用apk中对同一功能的皮肤文件名要一致
例如:应用程序的背景图片路径:\Skin\res\drawable-hdpi\XX.png
那么皮肤apk中的背景图片文件路径也应该是:Skin\res\drawable-hdpi\XX.png
c)访问资源的方法
获取到com.zj.skin对应的Context,通过返回的context对象就可以访问到com.zj.skin中的任何资源。
例如:应用apk要获得皮肤apk中的bg.png,
这样就得到了图片的引用,其他xml资源文件的获取方式也是类似的。
2)自定义扩展名的zip格式的皮肤
重点:读取zip文件中的资源以及皮肤文件存放策略。
方案:如果每次启动都读取SD卡上的皮肤文件,就会影响APP执行速度。最好是提供设置皮肤的界面,把用户选择的皮肤文件解压缩到皮肤路径下,这样不需要跨存储器读取,速度较快,而且不需要每次都去zip压缩包中读取,不依赖SD卡中的文件,就算皮肤压缩包被删除了也不会影响。
实现方法:
a) 在软件的帮助或者官网的帮助中提示用户将皮肤文件拷贝到SD卡指定路径下。
b) 在软件中提供皮肤设置界面。可以在菜单或者在设置中。可参考墨迹、搜狗输入法、QQ等支持换肤的软件。
c) 加载指定路径下的皮肤文件,读取其中的缩略图,在皮肤设置界面中显示,将用户选中的皮肤文件解压缩到皮肤路径下。
d) APP优先读取皮肤路径下的资源。如果没有则使用apk中的资源。
希望本文所述对大家Android程序设计有所帮助。