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 WebView无法加载H5页面的常见问题和解决方法

《AndroidWebView无法加载H5页面的常见问题和解决方法》AndroidWebView是一种视图组件,使得Android应用能够显示网页内容,它基于Chromium,具备现代浏览器的许多功... 目录1. WebView 简介2. 常见问题3. 网络权限设置4. 启用 JavaScript5. D

Android如何获取当前CPU频率和占用率

《Android如何获取当前CPU频率和占用率》最近在优化App的性能,需要获取当前CPU视频频率和占用率,所以本文小编就来和大家总结一下如何在Android中获取当前CPU频率和占用率吧... 最近在优化 App 的性能,需要获取当前 CPU视频频率和占用率,通过查询资料,大致思路如下:目前没有标准的

Gin框架中的GET和POST表单处理的实现

《Gin框架中的GET和POST表单处理的实现》Gin框架提供了简单而强大的机制来处理GET和POST表单提交的数据,通过c.Query、c.PostForm、c.Bind和c.Request.For... 目录一、GET表单处理二、POST表单处理1. 使用c.PostForm获取表单字段:2. 绑定到结

mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespace id不一致处理

《mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespaceid不一致处理》文章描述了公司服务器断电后数据库故障的过程,作者通过查看错误日志、重新初始化数据目录、恢复备... 周末突然接到一位一年多没联系的妹妹打来电话,“刘哥,快来救救我”,我脑海瞬间冒出妙瓦底,电信火苲马扁.

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

Python自动化处理手机验证码

《Python自动化处理手机验证码》手机验证码是一种常见的身份验证手段,广泛应用于用户注册、登录、交易确认等场景,下面我们来看看如何使用Python自动化处理手机验证码吧... 目录一、获取手机验证码1.1 通过短信接收验证码1.2 使用第三方短信接收服务1.3 使用ADB读取手机短信1.4 通过API获取

Python自动化Office文档处理全攻略

《Python自动化Office文档处理全攻略》在日常办公中,处理Word、Excel和PDF等Office文档是再常见不过的任务,手动操作这些文档不仅耗时耗力,还容易出错,幸运的是,Python提供... 目录一、自动化处理Word文档1. 安装python-docx库2. 读取Word文档内容3. 修改

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

使用C++将处理后的信号保存为PNG和TIFF格式

《使用C++将处理后的信号保存为PNG和TIFF格式》在信号处理领域,我们常常需要将处理结果以图像的形式保存下来,方便后续分析和展示,C++提供了多种库来处理图像数据,本文将介绍如何使用stb_ima... 目录1. PNG格式保存使用stb_imagephp_write库1.1 安装和包含库1.2 代码解