android主题机制(二)

Android App切换主题的实现原理剖析 现在越来越多的APP都加入了主题切换功能或者是日间模式和夜间模式功能切换等,这些功能不仅增加了用户体验也增强了用户好感,众所周知QQ和网易新闻的APP做的用户体验都非常好,它们也都有日间模式和夜间模式的主题切换功能。体验过它们的主题切换后你会发现大部分效果是更换相关背景图片、背景颜色、字体颜色等来完成的,网上这篇文章对主题切换讲解的比较不错,今天我们从源码的角度来学习一下主题切换功能,如果你对这块 阅读详情

基于前文对安卓主题的全面理解,本文将通过活用主题的机制,通过重定向资源文件,达到换肤的效果。这样可以在不更改逻辑,不重新打包应用,只通过R.java中资源文件的id重定向,即可达到美化系统的效果。

    先简单介绍下重定向的原理:

    1、系统启动时,开机关键的核心服务,开启主题相关服务AssetRedirectionManagerService

       

    该服务是主题的核心,用于重定向系统的资源引用,从而达到替换的效果。

    

    以上列出了该服务的所有方法,主线通过getPackageRedirectionMap-》generatePackageRedirectionMap-》generateExplicitRedirections-》process,将id对应res资源的定向保存在map映射中,我们通过对该map的修改,即可达到替换的效果。

下面具体讲讲主题包开发的流程:

    1、任何一个主题包的目录结构都包括Android.mk,AndroidManifest.xml和res文件夹,res大致包含以下内容

    

anim保存动画文件

color保存颜色值

drawable多用于存放selector文件

drawable-hdpi适配QHD分辨率并向上兼容

drawable-land-hdpi适配QHD横屏分辨率

nodpi适配时不会拉伸图片

drawable-320dp-hdpi适配480p(320*1.5)的手机

drawable-360dp-hdpi适配540p手机

drawable-360dp-xhdpi适配720p(360*2)的手机

drawable-xhdpi适配HD分辨率并向上兼容

drawable-xxhdpi适配FHD分辨率并向上兼容

drawable-zh-rCN-hdpi适配简体中文的资源,多用于图片上有汉字

drawable-zh-rTW-hdpi适配繁体中文的资源

mipmap-hdpi多用于QHD分辨率的应用图标

mipmap-xhdpi多用于HD分辨率的应用图标

values存放strings、dimen、标签形式的color、drawable文件,分辨率适配类似drawable,不赘述

xml存放配置文件和映射关系,该目录具体如下:



android.xml为framework中需要替换的资源,中间两个分别为待办事项和淘宝需要替换的资源,命名均为包名,redirections为重定向字典文件,内容如下:

如淘宝,如要替换淘宝的资源,会从该列表中分析淘宝的包名,对应的关联文件com_taobao_taobao.xml去寻找要替换哪些图片。


在com_taobao_taobao.xml中,我们又看到了需要替换的资源只有icon(为淘宝资源包中图片的名称),要替换为drawable/com_taobao_taobao_icon(为当前主题包中的资源引用)。


而这个图片我们放置在主题包的drawable-hdpi下,这样就完成了整体的替换关系。

各位有任何疑问,欢迎回复!



Android Overlay机制总结 Android Overlay机制 动态加载资源 阅读详情

相关推荐

MIUI主题风格_一种Android系统换肤功能的设计 思路(董红光)

cmdn club 14 讲师PPT MIUI主题风格_一种Android系统换肤功能的设计 思路(董红光)

Andriod中Style/Theme原理以及Activity界面文件选取过程浅析

转载请注明出处:http://blog.youkuaiyun.com/qinjuning           通过对前面的一篇博文从setContentView()谈起>的学习,我们掌握了Activity组件布局文件地创建过程以及 其顶层控件DecorView,今天我们继续庖丁解牛---深入到其中的generateLayout()方法,步步为营掌握一下内容:         1、Activity中Theme(

qinjuning、lets go 4万+

Android系统原理及开发要点详解(超清)

《Android系统原理及开发要点详解》全面介绍开放的移动电话平台Android系统,包括Android系统中的Linux驱动、本地框架、Java框架和Java应用4个层次。《Android系统原理及开发要点详解》内容以知识性内容为纲,重点关注开发要点,各个部分内容注重相互照应,按照清晰的思路向读者介绍整个Android系统的原理和开发方法。 《Android系统原理及开发要点详解》按照Android系统的框架和各个子系统的主线,重点介绍开发Android应用程序和构建硬件抽象层。其内容涵盖了Android应用程序开发和Android系统移植构建手机系统两大方面。 《Android系统原理及开发要点详解》既适合从事Android各个层次开发的工程师阅读,也适合通用嵌入式Linux系统的学习者使用。

Android 主题设计全解析

Android主题设计!有点乱?初学Android的时候对Android的主题设计都是处在一种模糊的认知状态,为啥呢?自定义时候的attr,普通view的style属性,activity以及application的theme属性,theme与style定义的一致性以及theme的众多可选性,系统预置的style属性的继承与使用等等……OK,先不管这些乱七八糟的,如果你对Android的主题设计依旧存

Walk the horizon 5037

QuickFix Java 实战(一)协议解析、环境搭建与首个应用

本文是QuickFix Java实战系列的第一篇,详细介绍了FIX协议的核心原理与QuickFix/J引擎的实战应用。内容涵盖FIX协议的标签化通信机制、QuickFix/J库的两种下载方法、协议定义文件解析,并通过一个完整的模拟订单发送示例,指导读者快速搭建首个FIX应用环境,实现消息生成与会话通信。

dog123的博客 495

IAR for ARM 搭建STM32F103C8T6工程模板(实战指南)

本文详细介绍了如何在IAR for ARM开发环境中为STM32F103C8T6微控制器搭建完整的工程模板。从环境准备、固件库获取、目录结构设计到工程配置与编译调试,提供了实战指南和常见问题解决方案,帮助开发者快速建立稳定的STM32开发环境。

fun88的博客 988

Android系统更换主题外观的实现方法

作者:Liuhua Chen   一、   实现思路 安卓应用在读取资源时是由AssetManager和Resources两个类来实现的。Resouce类是先根据ID来找到资源文件名称,然后再将该文件名称交给AssetManager来打开文件。我们主题开发的核心思路就是在应用读取资源时,先去主题包里读取资源,若有资源,直接返回主题包的资源,若无资源,直接返回应用本身的资源。 参考博客:ht

maetelibom的博客 6342

第二章 零差云控关节模组内部构造

对零差云控的eRob70I进行了拆解

SFY__优快云的博客 5965

Android主题换肤实现原理与Demo

Android主题换肤实现原理

yzwfeng的专栏 2335

用友u8服务器优化,用友U8erp软件运行的性能优化方案图文教程

今天一定要给大家分享一下用友U8erp软件运行的性能优化方案图文教程,以下方案来自用友软件官方维护工程师反馈在在处理客户问题的时候,有一类问题较为挠头,就是诸如用友U8服务器效率低下的问题。比如用友U8运行慢,卡住等,我们暂先不提用友U8软件代码、脚本层面本身的性能提升问题,我们只是基于现有用友U8软件版本,在客户现有环境下排查用友U8软件运行的性能瓶颈,并采取一定的技术手段进行性能调校。本文将推...

weixin_39882870的博客 5306

CATIA高效设计:自定义快捷键全攻略

本文详细介绍了如何在CATIA中自定义快捷键以提升设计效率。通过减少鼠标依赖、优化工作流程和减轻手腕疲劳,合理设置快捷键可显著提高建模速度。文章提供了从基础设置到高级配置的全流程指南,包括解决冲突、推荐方案及外设扩展建议,帮助用户快速掌握CATIA高效设计技巧。

weixin_42648844的博客 584

Android Framework切换主题后应用Activity生命周期变化分析

零.前言 ​   在工作遇到了系统切换主题后,应用页面出现重叠错乱,播放音频的时候出现了点击图标后出现声音停顿1S 后继续播放的问题… 一.生命周期流程   此时,Activity经历了销毁到创建,状态保存到恢复状态的过程,不同的手机有一定的差别。 二.源码分析(Android M) protected void onSaveInstanceState(Bundle outState) { outState.putBundle(WINDOW_HIERARCHY_TAG, mWi

wangadping的博客 1094

Nginx国密HTTPS实战:SM2双证书部署与TongSuo编译指南

HTTPS作为保障网络通信安全的基石,其核心在于SSL/TLS协议与公钥基础设施(PKI)。它通过非对称加密实现身份认证与密钥交换,再结合对称加密确保数据传输的机密性与完整性。在金融、政务等对自主可控有严格要求的领域,采用符合国家密码管理局标准的国密算法(SM2/SM3/SM4)替代国际通用算法(如RSA/SHA-256/AES),已成为满足安全合规要求的关键技术路径。国密SSL不仅是一套算法替换,更涉及从底层密码库到上层应用服务的完整技术栈改造。其核心价值在于实现密码技术的自主可控,提升特定场景下的安全防

weixin_29323365的博客 497

Colorful高级特性:如何实现自定义颜色和混合主题样式

Colorful是一款功能强大的Android运行时主题库,它允许开发者在应用运行时动态改变应用的颜色主题,为用户提供更加个性化的视觉体验。本文将详细介绍Colorful的高级特性,包括如何实现自定义颜色和混合主题样式,帮助开发者轻松打造出丰富多彩的应用界面。 ## 认识Colorful主题库 Colorful主题库为Android应用提供了灵活的主题定制能力,通过简单的API调用,开发者可以

gitblog_00745的博客 974

Android15车载系统开机冷启动流程源码解析

本文主要介绍Android15车机系统开机冷启动的流程,暂不包含bootloader,仅从kernel开始直至Launcher首页展示。

jidapenglin28的专栏 253

组态王与DLT645-2007电能表通讯调试总结

组态王与电力协议DLT 645-2007调试总结 DLT 645-2007是多功能电能表通信协议,该标准由中国电力企业联合会2006年提出,该协议为主-从结构的半双工通信方式。手持单元或其它数据终端为主站,多功能电能表为从站。每个多功能电能表均有各自的地址编码。通信链路的建立与解除均由主站发出的信息帧来控制。帧是传送信息的基本单元,每帧由帧起始符、从站地址域、控制码、数据域长度、数据域、帧信息纵向校验码及帧结束符7个域组成,每部分由若干字节组成,帧格式如图1所示。 1.确定设备地址 地址域由 6 个字节构

逍遥子的博客 1万+

【2013-10-29】Android应用开发笔记:全屏和去除标题栏

介绍 Android 去除标题栏和实现全屏的两种方式:代码方式通过 setFlags(FLAG_FULLSCREEN) 实现全屏,配置方式在 AndroidManifest.xml 中修改 application 的 theme 属性为 NoTitleBar 主题。

cstriker1407的专栏 15

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

安卓之使用Overlay开发主题切换简述

安卓之Overlay开发主题切换 在安卓开发的主题切换中,有很多种实现方法。如:Skin架构实现主题切换,Overlay机制实现资源替换,项目中Style.xml文件的样式替换,应该还是有些实现资源替换的方法,在这就不叙述了,有些替换的方式,不能引入新的资源文件,只能使用之前已经确定了的样子,比如Style.xml文件。有些替换方式可以导入新的资源信息,比如Overlay机制。Skin架构还没研究透彻,暂时不细说。 Style.xml实现主题切换: 在项目文件中的res/value/theme.xml

qq_55663458的博客 1960

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

android overlay机制实践

前言 最近在做launcher时有一个需求是通过overlay机制实现替换主题,中间遇到了不少问题,这里记录一下自己以后能用到,也希望能帮助有需要的同学。我使用的是android11系统,参考官方文档 https://source.android.google.cn/devices/architecture/rros?hl=zh-cn 概述 android overlay是一种资源的动态替换机制,它的工作原理是将叠加层软件包中定义的资源映射到目标软件包中定义的资源。当应用尝试解析目标软件包中资源的值时,系

qq_41818873的博客 7726

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Android安卓APP应用中代码实现主题换肤无缝切换

今天再给大家带来一篇干货。 Android的主题换肤 ,可插件化提供皮肤包,无需Activity的重启直接实现无缝切换,可高仿网易云音乐的主题换肤。 这个链接是本次的Demo打包出来的样本SkinChangeDemo,可以去下载下来先试试效果,皮肤文件需放到存储卡的根目录下。 关于Android的主题换肤都是个老生常谈的问题了。网上给出的方案也是层出不穷,最近我也是很想去了解这方面的知识,所以我...

快乐李同学的博客 2130

Android安卓 style(样式) 主题(Theme) 设置

      安卓的style(样式) 和主题(Theme) 是安卓界面设置的重要部分,个人觉得安卓的开发比JavaPC软件更加灵活,但是也更加麻烦,安卓的样式在本工程项目res / values / style.xml 文件中,样式文件可以让你自定义自己组建的样式,也可以定义全家组件的样式,比如,设置透明,设置字体颜色,设置程序没有状态栏,背景色等等,功能很强大,大多数有关于组建外观的,都可以用...

我在这里,你呢? 1538

Android中实现应用切换主题机制

一直很想弄清楚好多应用中是如何实现换皮肤这项功能的,花了下午点时间,查了下资料也实现了个切换主题的Demo; 首先要感谢下这位大哥,参阅了下他写的文件http://www.eoeandroid.com/forum-viewthread-tid-31756-highlight-%E7%9A%AE%E8%82%A4.html 好了,废话不多说了,该切换主题的demo里面一共实现了两个功能,其一,搜

gundumw100的专栏 664

Android:主题切换

主题切换

肖云鹤的博客 4495

安卓手机主题软件_安卓主题壁纸app下载-安卓主题壁纸软件下载v9.0.7

安卓主题壁纸是专门为广大安卓用户打造的一款主题美化软件,用户们可以在这里选择各种类型的主题和壁纸,大家可以完全免费的下载,丰富的类型以及各种华丽的特效等着大家来自定义选择,丰富的榜单让大家可以轻松找到喜欢的各种壁纸和主题。《安卓主题壁纸》软件特色:1.每天都有大量高清壁纸,预设的常用类别和固定的更新,使您的移动桌面更加精彩。2.支持墙纸搜索功能并推荐热门标签,以满足您更个性化的需求。3.桌面墙纸和...

weixin_39747383的博客 278

深入分析ActionBarSherlock的主题切换机制

在Android应用开发中,ActionBarSherlock作为一个已过时但仍被广泛参考的库,其主题切换机制为开发者提供了在不同Android版本上统一界面风格的解决方案。本文将详细解析其主题实现原理、资源组织方式及实际应用案例,帮助开发者理解如何在项目中实现灵活的主题切换功能。 ## 主题架构核心组件 ActionBarSherlock的主题系统建立在Android原生样式系统之上,通过自

gitblog_00411的博客 770
上一篇: 如何修改号码显示格式?比如将number修改为4-4-3分段格式
下一篇: Linux 使用技巧(持续更新)
byszy
博客等级 码龄17年 42粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值