返回顶部
首页 > 资讯 > 精选 >Android APP怎么换肤
  • 450
分享到

Android APP怎么换肤

2023-06-04 22:06:10 450人浏览 泡泡鱼
摘要

这篇文章主要讲解了“Android APP怎么换肤”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android APP怎么换肤”吧!背景需求目前Android APP换肤大体可分为两大类:两

这篇文章主要讲解了“Android APP怎么换肤”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android APP怎么换肤”吧!

背景需求

目前Android APP换肤大体可分为两大类:

  • 两套主题的切换(比如白天/黑夜),使用一个开关按钮进行切换。

  • 多套主题在线下载并更新。

第一种的实现基本上使用设置本地Theme来操作,即将所有的资源打包到APP中,并且根据主题进行切换。 第二种不可能使用第一种的实现方式,因为将所有资源都打包到APP中缺乏灵活性,不利于活动的更新,并且也会使得apk包的体积变大。所有第二种的实现必须是支持线上下载的。

方案选择

配合产品的需求并且能实现换肤的灵动性,我们选择上述的第二种方案。经过之前的AndroidiOS成员小组讨论,统一觉得可以采用下载压缩包,并通过解析压缩包读取资源进行替换。

压缩包下载下来后怎么读取资源?这里有两种方式:

  • 将下载的皮肤包进行解压缩并且通过文件流的方式读取里面的图片资源、文件资源。

  • 将下载的皮肤包加载到assetManager管理器中,并通过该管理器新建一个Resource对象,需要换肤的控件通过Resource对象进行读取资源。

第一种方式需要手动开启文件流,并且不同的文件流有不同的文件流方式,比如图片、文本文件等,还有不同设备由于分辨率加载的资源是不同的,如何合理地去选择合适的资源去加载也是一个需要解决的问题。

第二种方式需要将皮肤包加载到assetManager管理器,assetManager管理器新生成的Resource对象和我们主工程的Resource对象是相同类的不同对象,可以使用我们熟悉的方式去加载资源(如resource.getColorresource.getDrawable等)。

基于上述两种加载资源的方式,这里选择第二种方式进行资源的加载与读取。

具体实施

将所需的皮肤包通过网络下载到本地,这里的皮肤包是一个apk文件,为了让apk包足够小,里面只包含资源文件。可能有多个皮肤包,比如theme1.skintheme2.skin......

通过后台获取需要加载的皮肤包的名字,如theme1.skin,通过调用AssetManager对象的addAssetPath方法并生成一个新的Resource对象,如下代码:

  AssetManager assetManager = AssetManager.class.newInstance();  //由于addAssetPath()这个方法被隐藏掉了,所以不能直接使用对象直接访问,  //这里使用了反射的方式,作用是将该皮肤包加入到asset管理器中  Method addAssetPath = assetManager.getClass().getMethod("addAssetPath"  , String.class);  addAssetPath.invoke(assetManager, skinPath);  Resources skinResource = new Resources(    assetManager, superRes.getDisplayMetrics(), superRes.getConfiguration());

自定义一个InflaterFactory的子类,SkinInflaterFactory,重写onCreateView(View, String, Context, AttributeSet)方法,对于需要换肤的控件进行属性的解析与存储,然后对这些换肤的控件去第二步的Resource对象中加载资源并设置到这些控件中。

BaseActivityonCreate方法新建SkinInflaterFactory对象,并将该SkinInflateFactory对象设置给ActivityLayoutInflater对象,如下代码:

  protected void onCreate(@Nullable Bundle savedInstanceState) {      mSkinInflaterFactory = new SkinInflaterFactory();      LayoutInflaterCompat.setFactory(        getLayoutInflater(), mSkinInflaterFactory);      super.onCreate(savedInstanceState);  }

流程图

Android APP怎么换肤

其他问题

如何支持控件点击后触发不同的业务流程?
可以通过自定义一个属性,如skin:click="@string/clickAction",主工程的clickAction="muapp://app/testDefault",皮肤包里的clickAction="muapp://app/testClick",通过目前项目中的路由机制触发不同的跳转动作。比如说上述默认的跳转是跳转到主工程(appmodule名)的TestDefaultAction(注解actionName="testDefault")类的invoke方法中,而更改后会跳转到主工程(appmodule名)的TestClickAction(注解actionName="testClick")类的invoke方法中。
2、如何支持控件的不同行为方式?例如不同的动画效果等
这个问题和第一个问题的处理方式的类似的,同样可以通过主工程和皮肤包不同的tagString文案)处理不同的行为方式。
3、如何处理自定义View的换肤需求?
可以添加一个方法,将自定义View需要换肤的属性名(如background),属性值(如background对应的图片的资源ID)传递到方法中,然后去皮肤包的Resource对象中寻找是否有相应的可替换的皮肤或者可替换的行为。

感谢各位的阅读,以上就是“Android APP怎么换肤”的内容了,经过本文的学习后,相信大家对Android APP怎么换肤这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Android APP怎么换肤

本文链接: https://lsjlt.com/news/240254.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android APP怎么换肤
    这篇文章主要讲解了“Android APP怎么换肤”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android APP怎么换肤”吧!背景需求目前Android APP换肤大体可分为两大类:两...
    99+
    2023-06-04
  • 分析Android App中内置换肤功能的实现方式
    Android平台api没有特意为换肤提供一套简便的机制,这可能是外国的软件更注重功能和易用,不流行换肤。系统不提供直接支持,只能自行研究。 换肤,可以认为是动态替换资源(文...
    99+
    2022-06-06
    app Android
  • 仿墨迹天气在Android App中实现自定义zip皮肤更换
    在这里谈一下墨迹天气的换肤实现方式,不过首先声明我只是通过反编译以及参考了一些网上其他资料的方式推测出的换肤原理, 在这里只供参考. 若大家有更好的方式, 欢迎交流. 墨迹天气...
    99+
    2022-06-06
    天气 zip app Android
  • Android 换肤技术资料整理
    Android换肤技术总结 背景 纵观现在各种Android app,其换肤需求可以归为 - 白天/黑夜主题切换(或者别的名字,通常2套),如同花顺/自选股/天天动听等,U...
    99+
    2022-06-06
    Android
  • 怎么在Android 应用中实现一个换肤功能
    今天就跟大家聊聊有关怎么在Android 应用中实现一个换肤功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Android换肤技术总结背景纵观现在各种Android app,其换肤...
    99+
    2023-05-31
    android roi
  • C#怎么实现窗体换肤
    这篇“C#怎么实现窗体换肤”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C#怎么实现窗体换肤”文章吧。效果代码public&...
    99+
    2023-07-04
  • Android 应用更换皮肤实现方法
    Android应用更换皮肤功能的实现思路        我们可以将皮肤包做成一个apk文件,在应用apk中读取皮肤包...
    99+
    2022-06-06
    方法 Android
  • Android编程实现换肤功能实例
    本文实例讲述了Android编程实现换肤功能的方法。分享给大家供大家参考,具体如下: 本系列专题培训适用范围:初级Android程序员,即有J2SE基础和Android初级水平...
    99+
    2022-06-06
    Android
  • Android实现换肤的两种思路分析
    本文分析了Android实现换肤的两种思路。分享给大家供大家参考,具体如下: 这里来了解换肤实现及不同方案的差异和使用场合。 一、从功能上划分 1) 软件内置多个皮肤,用户不能...
    99+
    2022-06-06
    Android
  • Android应用开发中实现apk皮肤文件换肤的思路分析
    在android的项目开发中,都会遇到后期功能拓展增强与主程序代码变更的现实矛盾,也就是程序的灵活度。 由于linux平台的安全机制,再加上dalvik的特殊机制,各种权限壁垒...
    99+
    2022-06-06
    apk Android
  • vue中怎么实现一个换肤功能
    这篇文章给大家介绍vue中怎么实现一个换肤功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1 色值的选取和原则推荐大家看下蚂蚁金服的设计指引,里面对常见的交互和界面设计有一套不错的指...
    99+
    2024-04-02
  • 怎么用jQuery.cookie.js插件实现换肤功能
    本篇内容主要讲解“怎么用jQuery.cookie.js插件实现换肤功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用jQuery.cookie.js插件...
    99+
    2024-04-02
  • Android怎么实现app本地切换logo和名称
    本篇内容主要讲解“Android怎么实现app本地切换logo和名称”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android怎么实现app本地切换logo和名称”吧!首先呢,在app的And...
    99+
    2023-06-29
  • 【Android Studio】APP练手小项目——切换图片APP
    本项目效果: 前言:本项目最终实现生成一个安卓APP软件,点击按钮可实现按钮切换图片。项目包含页面布局、功能实现的逻辑代码以及设置APP图标LOGO和自定义APP名称。 关于Android Studio的下载与安装见我的博文:And...
    99+
    2024-01-21
    android studio android ide
  • 利用JavaScript怎么编写一个换肤功能
    这篇文章给大家介绍利用JavaScript怎么编写一个换肤功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。原理通过点击事件,获取点击的的图片的信息,在HTML背景图片的路径改变css样式<style>&n...
    99+
    2023-06-06
  • WinForm中怎么实现主题和皮肤切换
    在WinForm中实现主题和皮肤切换通常可以通过以下步骤来实现: 创建多个不同主题或皮肤的样式文件,比如XML文件或INI文件等,...
    99+
    2024-04-08
    winform
  • 男性护肤APP软件开发需要什么功能
    这篇“男性护肤APP软件开发需要什么功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“男性护肤APP软件开发需要什么功能”文...
    99+
    2023-06-26
  • Android App中进行语言的切换
    目录切换语言核心代码使用dragonFace改系统语言本篇简单介绍将在Android App中进行语言的切换和使用dragonFace改系统语言。 切换语言 首先需要在res 中创...
    99+
    2024-04-02
  • C#皮肤怎么用
    小编给大家分享一下C#皮肤怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!C#皮肤使用方法如下:C#皮肤使用第一步先把IrisSkin2.dll文件【我机器上...
    99+
    2023-06-17
  • Android App怎么防止抓包
    本篇内容主要讲解“Android App怎么防止抓包”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android App怎么防止抓包”吧!正文当我们进行网络请求的时候,一般通...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作