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

作者:mer1234567 时间:2023-03-25 13:54:18 

本文分析了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,换肤
0
投稿

猜你喜欢

  • 基于Kubernetes实现前后端应用的金丝雀发布(两种方案)

    2023-01-07 02:32:27
  • C#超市收银系统设计

    2023-06-21 00:00:09
  • Android自定义视图中图片的处理

    2023-06-29 12:07:27
  • Java实现解析JSON大文件JsonReader工具详解

    2023-08-21 21:13:14
  • Android的Launcher启动器中添加快捷方式及小部件实例

    2022-10-26 13:05:14
  • 浅谈基于SpringBoot实现一个简单的权限控制注解

    2022-01-23 16:42:47
  • 使用IDEA异常断点来定位java.lang.ArrayStoreException的问题

    2022-06-14 00:43:18
  • Android开发之Button事件实现与监听方法总结

    2022-02-05 02:45:40
  • springboot集成nacos读取nacos配置数据的原理

    2021-08-09 13:38:25
  • C#中的那些警告该如何去除(完全去除C#警告)

    2023-09-07 20:55:53
  • SpringBoot集成EasyExcel的步骤

    2023-07-19 09:59:17
  • Java自定义注解用法实例小结

    2023-03-26 09:13:51
  • c# 读取XML文件的示例

    2023-11-04 00:51:17
  • Android中使用Gson解析JSON数据的两种方法

    2021-10-13 23:25:39
  • mybatis之如何获取表中某一列的最大值

    2022-03-26 08:38:53
  • Java Controller实现参数验证与统一异常处理流程详细讲解

    2022-01-25 18:49:47
  • c# wpf如何附加依赖项属性

    2023-01-09 05:05:56
  • C#无损转换Image为Icon的方法

    2023-07-30 02:38:40
  • SpringBoot整合Log4j2及配置步骤

    2023-10-27 10:50:16
  • OkHttp3中默认不保持Cookie的解决方法

    2021-10-25 15:20:50
  • asp之家 软件编程 m.aspxhome.com