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 kotlin语言实现删除文件的解决方案

《Androidkotlin语言实现删除文件的解决方案》:本文主要介绍Androidkotlin语言实现删除文件的解决方案,在项目开发过程中,尤其是需要跨平台协作的项目,那么删除用户指定的文件的... 目录一、前言二、适用环境三、模板内容1.权限申请2.Activity中的模板一、前言在项目开发过程中,尤

一文详解Python中数据清洗与处理的常用方法

《一文详解Python中数据清洗与处理的常用方法》在数据处理与分析过程中,缺失值、重复值、异常值等问题是常见的挑战,本文总结了多种数据清洗与处理方法,文中的示例代码简洁易懂,有需要的小伙伴可以参考下... 目录缺失值处理重复值处理异常值处理数据类型转换文本清洗数据分组统计数据分箱数据标准化在数据处理与分析过

mysql外键创建不成功/失效如何处理

《mysql外键创建不成功/失效如何处理》文章介绍了在MySQL5.5.40版本中,创建带有外键约束的`stu`和`grade`表时遇到的问题,发现`grade`表的`id`字段没有随着`studen... 当前mysql版本:SELECT VERSION();结果为:5.5.40。在复习mysql外键约

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

Python视频处理库VidGear使用小结

《Python视频处理库VidGear使用小结》VidGear是一个高性能的Python视频处理库,本文主要介绍了Python视频处理库VidGear使用小结,文中通过示例代码介绍的非常详细,对大家的... 目录一、VidGear的安装二、VidGear的主要功能三、VidGear的使用示例四、VidGea

Python结合requests和Cheerio处理网页内容的操作步骤

《Python结合requests和Cheerio处理网页内容的操作步骤》Python因其简洁明了的语法和强大的库支持,成为了编写爬虫程序的首选语言之一,requests库是Python中用于发送HT... 目录一、前言二、环境搭建三、requests库的基本使用四、Cheerio库的基本使用五、结合req

使用Python处理CSV和Excel文件的操作方法

《使用Python处理CSV和Excel文件的操作方法》在数据分析、自动化和日常开发中,CSV和Excel文件是非常常见的数据存储格式,ython提供了强大的工具来读取、编辑和保存这两种文件,满足从基... 目录1. CSV 文件概述和处理方法1.1 CSV 文件格式的基本介绍1.2 使用 python 内

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO