Android换肤处理

2024-05-29 00:32
文章标签 android 处理 换肤

本文主要是介绍Android换肤处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天被点九图的处理整的晕头转向的,主要原因是现在要处理的点九图是需要从后台下载而不是直接指定到资源文件中,网上找了不少处理都没有收到很好的效果,这里我先主要介绍一下通过下载apk,然后从apk中获取资源文件的方式。
先看下效果图吧。
加载前
pre
加载后
after
这里我们明显的看到加载前跟加载后的效果背景框。9图加载后能完美设置到控件上(这里我们重点关注下红框里面的内容,虽然美女很漂亮)
1.首先是写工具类


public class ResUtils {@SuppressLint("PrivateApi")public static Drawable getExtraResources(Context context, String resouseApkPath, String extraResName, String extraRPackage) {try {Resources superRes = context.getResources(); // 读取本地的一个 .skin里面的资源AssetManager asset = AssetManager.class.newInstance();// 创建AssetManagerMethod method = AssetManager.class.getDeclaredMethod("addAssetPath", String.class);  // method.setAccessible(true); 如果是私有的method.invoke(asset, resouseApkPath);  // 反射执行方法 getApplicationContext().getFilesDir().getAbsolutePath()+ File.separator + "red.skin"Resources resource = new Resources(asset, superRes.getDisplayMetrics(), superRes.getConfiguration());int drawableId = resource.getIdentifier(extraResName, "drawable", extraRPackage);  // 获取资源 id  "affinity_show_guide"  "com.showself.ui"return resource.getDrawable(drawableId);} catch (Exception e) {e.printStackTrace();return null;}}}

主要思路是通过反射调用AssertManager的addAssetPath方法获取到resource 对象在通过调用resource的getIdentifier方法获取我们的drawable
这里需要注意几点
1.传递的参数resouseApkPath是我们下载的承载皮肤的apk路径(需要从后台下载)
2.extraResName这个参数是我们要调用的res的名称如R.drawable.aas 那么这个参数填写aas
3.extraRPackage这个参数是我们下载的apk包R这个类的包名如下载apk的包名为 com.tta,R那这里的参数为com.tta

2.最后一步就是调用了也是很简单代码如下

public void onClick(View v) {Toast.makeText(this,"点击",Toast.LENGTH_LONG).show();Drawable drawable=  ResUtils.getExtraResources(this, getApplicationContext().getFilesDir().getAbsolutePath()+ File.separator + "red.skin","chat_left_bubble_message_bg","com.showself.ui");if (drawable!=null){RelativeLayout rl_content= (RelativeLayout) findViewById(R.id.rl_content);rl_content.setBackgroundDrawable(drawable);}}

是不是很简单,希望这篇博客能帮助到迷茫的小伙伴。

这篇关于Android换肤处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1012132

相关文章

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

Java字符串处理全解析(String、StringBuilder与StringBuffer)

《Java字符串处理全解析(String、StringBuilder与StringBuffer)》:本文主要介绍Java字符串处理全解析(String、StringBuilder与StringBu... 目录Java字符串处理全解析:String、StringBuilder与StringBuffer一、St

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

浅析Java中如何优雅地处理null值

《浅析Java中如何优雅地处理null值》这篇文章主要为大家详细介绍了如何结合Lambda表达式和Optional,让Java更优雅地处理null值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录场景 1:不为 null 则执行场景 2:不为 null 则返回,为 null 则返回特定值或抛出异常场景

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle

resultMap如何处理复杂映射问题

《resultMap如何处理复杂映射问题》:本文主要介绍resultMap如何处理复杂映射问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录resultMap复杂映射问题Ⅰ 多对一查询:学生——老师Ⅱ 一对多查询:老师——学生总结resultMap复杂映射问题

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整