Android实现换肤的两种思路分析
本文分析了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程序设计有所帮助。
您可能感兴趣的文章:Android主题切换之探究白天和夜间模式基于android样式与主题(style&theme)的详解Android中应用界面主题Theme使用方法和页面定时跳转应用Android 设置主题实现点击波纹效果的示例分析Android多主题颜色的相关问题Android入门教程之创建样式与主题Android编程应用风格和主题详解android仿iphone主题效果的主菜单Android编程实现换肤功能实例Android开发实现切换主题及换肤功能示例
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341