android 动态切换主题,android动态主题切换(RRO 技术)
android上的主题切换,Android从M开始加入了动态资源overlay机制 runtime resource overlay(RRO),这个是sony贡献的,实现机制如下图,就是在框架中建立一套资源ID映射表,通过这个映射表动态切换不同的主题。
image.png
具体的代码实现在 OverlayManagerService 代码中,
代码的架构如下,IdmapManager是生成对应的映射表。
Android framework
| ^
. . . | . . . . | . . . .
. | | .
. AIDL, broadcasts .
. intents | .
. | | . . . . . . . . . . . .
. v | . .
. OverlayManagerService . OverlayManagerTests .
. \ . / .
. (1) \ . / (3) .
. . . . . . . . . . \ . . . / . . . . . . . . .
. \ / .
. (2) \ / .
. OverlayManagerServiceImpl .
. | | .
. | | .
. OverlayManagerSettings IdmapManager .
. .
. . . . . . . . . . . . . . . . . . . . . .
通过 adb shell dumpsys overlay 命令可以查看系统里面的overlay包以及包的状态。
下面命令可以设置每个资源包的状态,设置成enable就会立即生效,(具体命令可以到代码里面查到shellcommand)
adb exec-out cmd overlay enable com.android.systemui.theme.dark
实现方法,把新主题的资源和目标apk的资源完全一致的ID,生成一套应用的资源,
<?xml version="1.0" encoding="utf-8"?>RRODemo这是原生应用的资源
overlay资源:
<?xml version="1.0" encoding="utf-8"?>这是rro加载的资源
这里需要替换的就是hello_world的显示内容,这个名字必须和待替换的资源名(hello_world)相同
manifest按照如下方式实现:
package="com.android.systemui.theme.dark"
android:versionCode="1"
android:versionName="1.0">
注意这个apk需要在大环境里面编译,编译的mk按照如下方式编写,注意签名。
LOCAL_PATH:=
(CLEAR_VARS)
LOCAL_RRO_THEME := SysuiDarkTheme
LOCAL_CERTIFICATE := platform
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_PACKAGE_NAME := SysuiDarkThemeOverlay
LOCAL_SDK_VERSION := current
include $(BUILD_RRO_PACKAGE)
生成apk后push到 system/vendor/overlay里面。 就可以了。
android 动态切换主题,android动态主题切换(RRO 技术)相关推荐
- android动态改变菜单栏,Android动态设置主题(使用RxBus模式)
之前写过一篇文章:RxBus的实现及简单使用.今天我们尝试使用RxBus动态切换主题. 一.定义主题颜色 color.xml #F44336 #D32F2F #F44336 #E91E63 #C218 ...
- Android主题换肤 无缝切换
作者 _SOLID 关注 2016.04.17 22:04* 字数 4291 阅读 23224评论 123喜欢 679 今天再给大家带来一篇干货. Android的主题换肤 ,可插件化提供皮肤包,无需 ...
- Android主题换肤 无缝切换 你值得拥有
链接:https://www.jianshu.com/p/af7c0585dd5b 天再给大家带来一篇干货. Android的主题换肤 ,可插件化提供皮肤包,无需Activity的重启直接实现无缝切换 ...
- Android 必知必会 - 动态切换着色模式和全屏模式
如果移动端访问不佳,欢迎使用 ==> Github 版 通过代码动态切换页面的着色模式和全屏模式,兼容 Android 4.4 + . 本文假设读者已经了解着色模式和全屏模式(沉浸模式). 背景 ...
- vue + element-UI 实现深色模式和主题色动态切换
vue + element-UI 实现深色模式和主题色动态切换 文章目录 vue + element-UI 实现深色模式和主题色动态切换 前言 深色模式和主题色动态切换 本地样式切换 主题色切换 el ...
- VUE动态切换皮肤 VUE动态切换背景图片 操作 / VUE 主题切换
上正文 使用:root ,var()函数实现 1. 创建皮肤或主题 css目录 一个公共主题文件 theme.css,一个main.js引入文件theme-all.css,一个单独的 主题样式文件 ...
- android 动态设置windowbackground,android – windowBackground不会随主题而改变
我的申请中有两个主题.我有一个蓝色背景的蓝色主题: @drawable/menu_hardkey_panel_actionbar @style/ButtonAppTheme @drawable/bgr ...
- android设置夜间模式切换,android主题切换(简单的白/夜间模式的切换)
效果图: 实现: android:layout_width="match_parent" android:layout_height="match_parent" ...
- Android插件化开发之动态加载本地皮肤包进行换肤
Android插件化开发之动态加载本地皮肤包进行换肤 前言: 本文主要讲解如何用开源换肤框架 android-skin-loader-lib来实现加载本地皮肤包文件进行换肤,具体可自行参考框架原理进行 ...
最新文章
- Microsoft training Kits
- python如何启动前端_python- 前端进阶
- unity3d软阴影和硬阴影的原理_Unity3D中两种默认阴影的实现
- linux cache fs,新闻|Linux 上将出现一个新的文件系统:bcachefs
- java web 来源页_Java:Java Web--分页效果
- ES6_对象简洁语法_note
- android 清除所有计时器,android-如何从onTick方法中清除CountDownTimer?
- Excel-DNA开发包:ExcelDna-0.34.6.zip下载
- mac下打开多个相同应用程序
- js使用的一些实用技巧
- dev项目属性按钮是灰色_【网页特效】11 个文本输入和 6 个按钮操作 特效库
- H.266/VVC代码学习:xCheckRDCostAffineMerge2Nx2N函数
- 大数据处理平台都有哪些?
- UE4 角色添加武器后 移动出现漂移
- Oracle练习题(三)
- 永久免费的抠图软件分享
- Fintech趣店总部(厦门)技术招聘
- string.h头文件
- tikz 折线 箭头_LaTeX技巧862:用 TikZ 实现带箭头的注释效果
- 初中数学抽象教学的案例_初中数学教学案例