实现资源的替换,需要分为以下几个步骤

1.找到需要更改的模块 mediatek/packages/apps/FileManager

2.到主题模块下根据包名找到相应资源(以Grass为例) cd vendor/themes/Grass/values com_mediatek_filemanager_colors com_mediatek_filemanager_styles

代码如下

com_mediatek_filemanager_styles

<?xml version="1.0" encoding="UTF-8"?>
<resources>
<style name="FileManager.Theme" parent="@android:style/Theme.Funui">
<item name="*android:searchViewTextColor">@color/search_color</item>
<item name="*android:searchViewTextColorHint">@color/search_hint_color</item>
<item name="*android:searchViewSearchIcon">@drawable/com_mediatek_filemanager_search_image</item>
</style> <style name="FileManager.Theme.NoActionBar" parent="@android:style/Theme.Funui.NoActionBar">
</style>
</resources>

com_mediatek_filemanager_colors

<?xml version="1.0" encoding="UTF-8"?>
<resources>
<color name="item_selected_color">#7fed6f00</color>
<color name="action_text_select_color">#ffffff</color>
<color name="search_color">#000000</color>
<color name="search_hint_color">#919192</color>
</resources>

讲解一下这个Theme的工作原理

theme主要就是通过应用的包名来识别应用处理的。首先当一个应用工作的时候,这个主题就会查看自己目录下是否有这个应用的包名文件,然后从这个包名文件中选择相应的资源去替换到应用中的同名或者加了包名的资源。当然,这个资源可以是图片,也可以是style,color等

注意:主题下的资源可以替换相应应用的,但是,主题却不可引用相应应用下的资源。例如<item name="*android:searchViewTextColorHint">@color/search_hint_color_aa</item>  search_hint_color_aa 是filemanager下的颜色,这样是会报错的。你想替换或者使用的资源,必须在这个theme下添加 (图片-drawable* 共用的  颜色-自己相应包名应用下*color style-自己相应包名下的*style)

3.当你添加了资源以后,你需要执行一下p2x c 这个命令的作用,其实就是在xml目录下的com_mediatek_filemanager.xml里面注册你添加的新的资源信息

<?xml version="1.0" encoding="utf-8"?>
<resource-redirections>
<item name="color/action_text_select_color">@color/action_text_select_color</item>
<item name="color/item_selected_color">@color/item_selected_color</item>
<item name="color/search_color">@color/search_color</item>
<item name="color/search_hint_color">@color/search_hint_color</item>
<item name="drawable/action_bar_background_pressed">@drawable/com_mediatek_filemanager_action_bar_background_pressed</item>
<item name="drawable/app_filemanager">@drawable/com_mediatek_filemanager_app_filemanager</item>
<item name="drawable/dropdown_ic_arrow_normal_holo_dark">@drawable/com_mediatek_filemanager_dropdown_ic_arrow_normal_holo_dark</item>
<item name="drawable/fm_copy">@drawable/com_mediatek_filemanager_fm_copy</item>
<item name="drawable/fm_cut">@drawable/com_mediatek_filemanager_fm_cut</item>
<item name="drawable/fm_delete">@drawable/com_mediatek_filemanager_fm_delete</item>
<item name="drawable/fm_home_focus">@drawable/com_mediatek_filemanager_fm_home_focus</item>
<item name="drawable/fm_home_ninepatch_focus">@drawable/com_mediatek_filemanager_fm_home_ninepatch_focus</item>
<item name="drawable/fm_tab_focus">@drawable/com_mediatek_filemanager_fm_tab_focus</item>
<item name="drawable/search_image">@drawable/com_mediatek_filemanager_search_image</item>
<item name="style/FileManager.Theme.NoActionBar">@style/FileManager.Theme.NoActionBar</item>
<item name="style/FileManager.Theme">@style/FileManager.Theme</item>
</resource-redirections>

这个文件就是上面原理的依据,它就是通过查找这个文件来决定是否替换一个资源的。这个当然可以手动添加,当然,为了使用p2x c 自动添加文件到xml中,我们命名的时候,尽量使用原名,或者在原名前面添加相应的包名。你会发现,执行p2x c以后,它生成的文件,会自动去点包名。例如

color中添加:<color name="com_mediatek_filemanager_aaa_color">#323232</color>

p2x c

在xml中生成:<item name="color/aaa_color">@color/com_mediatek_filemanager_aaa_color</item>

意义:应用下的aaa_color会替换为theme下的com_mediatek_filemanager_aaa_color

Funui-Theme 资源的替换的更多相关文章

  1. Funui-overlay 如何添加theme 的 overlay

    昨天更改theme主题的时候,发现所有仓库下的theme都是共用的.也就是说,如果你更改了52平台下的theme,那么你提交了代码以后,82下也会发生相应的更改.但是,昨天修改的theme属性,只在3 ...

  2. 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新

    上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...

  3. WPF 之 资源(Resource)

    1.什么叫WPF的资源(Resource)? 资源是保存在可执行文件中的一种不可执行数据.在WPF的资源中,几乎可以包含图像.字符串等所有的任意CLR对象,只要对象有一个默认的构造函数和独立的属性. ...

  4. WPF中的资源简介、DynamicResource与StaticResource的区别(转)

    什么叫WPF的资源(Resource)?资源是保存在可执行文件中的一种不可执行数据.在WPF的资源中,几乎可以包含图像.字符串等所有的任意CLR对象,只要对象有一个默认的构造函数和独立的属性. 也就是 ...

  5. 基于年纪和成本(Age & Cost)的缓存替换(cache replacement)机制

    一.客户端的缓存与缓存替换机制 客户端的资源缓存: 在客户端游戏中,通常有大量的资源要处理,这些可能包括贴图.动作.模型.特效等等,这些资源往往存在着磁盘文件->内存(->显存)的数据通路 ...

  6. Android应用程序资源的编译和打包过程分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8744683 我们知道,在一个APK文件中,除了 ...

  7. android应用资源预编译,编译和打包全解析

    我们知道,在一个APK文件中,除了有代码文件之外,还有很多资源文件.这些资源文件是通过Android资源打包工具aapt(Android Asset Package Tool)打包到APK文件里面的. ...

  8. 超越Ctrl+S保存页面所有资源

    如何抓取页面所有内容 基本需求 抓取页面所有内容主要包括一下内容: 页面内元素 页面元素包含服务端直接返回的元素,动态构建的元素 页面内所有资源 页面所有资源包含本页面所在域资源以及第三方域资源,同主 ...

  9. 删除csdn上面自己上传的资源

    今天想删掉以前的资源,才发现CSDN并没有提供删除资源的功能,然后去网上搜了下,这才删除了,不知道怎么删除的小伙伴看过来~ 首先,找到自己要删除资源的页面,举个栗子 https://download. ...

随机推荐

  1. ECNUOJ 2619 询问

    询问 Time Limit:2000MS Memory Limit:65536KBTotal Submit:286 Accepted:70 Description  Pollux最近对字符串匹配很感兴 ...

  2. Redis中的持久化操作

       本篇博客主要来解说一下怎样Redis中的持久化操作,当然了不是一篇理论性的博客,主要还是分享一下在redis中怎样来配置持久化操作.  1.介绍  redis为了内部数据的安全考虑,会把本身的数 ...

  3. Python数据可视化——散点图

    PS: 翻了翻草稿箱. 发现竟然存了一篇去年2月的文章...尽管naive.还是发出来吧... 本文记录了python中的数据可视化--散点图scatter, 令x作为数据(50个点,每一个30维), ...

  4. Mysql Workbench初体验

    可以画图,建立表关系. 分类整理数据表. 可以直接导出sql语句. 可以导出png图片. 可以连接mysql数据库. 基本满足了各项需求. 这次初体验只是基本的功能,这个软件对于mysql还是很牛的.

  5. bind DNS搭建笔记

    设置默认网关 偶尔会出现问题 route add default gw 192.168.0.1 .vim /etc/sysctl.conf 这里是重点 配置路由转发,路由开启等都要用到. # Cont ...

  6. linux RAC 安装失败完全卸载

    1,删除软件安装目录 rm -rf /u01/app 2,删除以下目录内容 rm -rf /tmp/.oracle rm -rf   /tmp/* rm -rf   /tmp/ora* rm -rf ...

  7. xcode 条件调试

    添加条件 有时候我们可能会在某个循环中创建断点,但一次又一次地点击 continue 直到我们想要的条件出现,显然是一种非常低效的方式.好在 Xcode 为我们提供了条件断点. 首先在下列代码中插入一 ...

  8. 51nod 多重背包问题(二进制优化)

    有N种物品,每种物品的数量为C1,C2......Cn.从中任选若干件放在容量为W的背包里,每种物品的体积为W1,W2......Wn(Wi为整数),与之相对应的价值为P1,P2......Pn(Pi ...

  9. 一个Web报表项目的性能分析和优化实践(六):设置MySQL的最大连接数(max_connections)

    在上一篇文章中"一个Web报表项目的性能分析和优化实践(二):MySQL数据库连接不够用(TooManyConnections)问题的一次分析和解决案例"提到,项目中新增几个数据库 ...

  10. SpringBoot 增加 拦截器 判断是否登录

    1.创建拦截器 package com.example.demo.interceptor; import org.slf4j.Logger; import org.slf4j.LoggerFactor ...