目的:
为了加强用户体验,增强品牌效应,使我们的产品有自己独特的风格,主题的定制将会是必然趋势……
然而Android原生系统是不支持主题定制的,所以如何来定制主题,如何做得更好,需要大家集思广益……
策略:
将介绍两种定制主题的机制:
1.根据Android Configuration Qualifier机制,加入我们自己的JRDTheme定制。
2.用主题包的形式,根据用户选择不同的主题,而加载不同主题包中的资源。
基本原理:
首先介绍方式一:
Android Configuration Qualifier
Android 系统为一个项目提供了多套可供选择的资源,通过命名特殊的资源文件夹来区别它们。系统在运行的时候,根据设备的当前配置为每个应用加载合适的资源。
这些不同的资源都是放在每个应用的res/目录下面的,特殊的命名方式是<resources_name>-<config_qualifier>:
<resources_name>: 资源文件夹的名字,与默认资源文件夹保持一致
<config_qualifier>: 根据设备不同配置,需要使用的资源文件夹名字
Android系统根据优先级的先后顺序已经支持多种Configuration Qualifier,如图1:

如何添加 Jrd Theme Resources
JrdTheme 的核心策略是当我们设定了不同的主题后,会自动的替换我们想要替换的资源(Framework&App)。具体步骤如下:
1. 工程师从UE哪里获得我们想要改变的主题资源,
2.把这些资源放到对应模块的res/目录下,以Contacts模块为例,假如我们想要定制drawable、color、layout。
原来在Contacts模块中默认的资源目录如下:
res/
layout/
main.xml
info.xml
drawable/
icon.png
values/
colors.xml
定制后的资源目录如下:
res/
layout/
main.xml
info.xml
layout-jrdthemexxx/
main.xml
info.xml
drawable/
icon.png
drawable-jrdthemexxx/
icon.png
values/
colors.xml
values-jrdthemexxx/
colors.xml
Notes: jrdthemexxx 是其中一个 主题的 Qualifier,如果有多个主题,那么将会有多个jrdthemexxx存在。
3.与原来一样编译这些模块,push到手机中即可。
这只是一个guide ,具体实现还要细化…… 目前在diablo、beetle上面已经用这种方式实现了……我在smartiii上尝试过,机制没问题,但是改动的范围太大了,比较麻烦。

方式二:

核心思想:系统中有多套主题资源包,并且应用可以用相同的资源ID来访问不同资源包中对应的资源。 Android原生系统的资源访问流程 对应用来说,资源访问主要有下面三种方
式:
第一、比较普遍的方式是使用xml定义,并且通过AAPT工具生成一个R文件,列出资源的索引来让Android系统自己去遍历整个资源树的方式来访问。
第二、通过Resources接口来访问,使用Resources类的getDrawable、getString等接口来获取资源。
第三、通过AssetManager类的接口去访问,使用这个类的open方法来返回一个InputStream对象得到资源。
其实这三个访问方式只是Android资源访问中整个流程中在不同层次对外提供的三个接口,到底层的实现都是殊途同归的。
因此我们实际上需要修改的部分主干是在访问资源具体路径前,按照当前系统主题设置访问不同资源APK下的文件
即是把原生Android中资源ID和资源文件路径之间一对一的关系改为一对多的关系。
例子如下:如果原有资源ID和资源文件路径关系为:
R.drawable.image01 = 0x7F020001
通过系统的资源查找之后找到文件路径为 /system/app/frameworks-res.apk下的res/drawable_hdpi/icon.png
在AssetManager native中去读取资源并上传。
那么我们需要做的是在传入路径去读取资源时把文件路径替换为/data/app/SystemTheme01.apk下的res/drawable_hdpi/icon.png

Android如何定制主题相关推荐

  1. Android动态切换主题

    软件换肤从功能上可以划分三种: 1) 软件内置多个皮肤,不可由用户增加或修改: 最低的自由度,软件实现相对于后两种最容易. 2) 官方提供皮肤供下载,用户可以使用下载的皮肤: 用户可选择下载自己喜欢的 ...

  2. 国内支持原生android吗,定制安卓和原生Android到底有哪些不同之处?彻底真相了...

    相信大家都知道最近在搞机圈有个大新闻,就是小米即将于8月份推出MIUI 9.近日小米MIUI市场副总监@黄龙中 就在微博上征求米粉意见,暗示MIUI 9可能长下面这样. 小米最新官方主题<几何& ...

  3. android 启动页主题_如何使用主题和启动器个性化您的Android手机

    android 启动页主题 Android's customizability is one reason many people prefer it. You can change the look ...

  4. nubia基于android深度定制的ui,系统硬件篇:走心的Nubia UI

    系统篇:走心的Nubia UI 系统方面,努比亚M2搭载了基于Android深度定制的Nubia UI 4.0系统,同时针对努比亚M2的定位和风格,对系统的界面和图标进行了重新的绘制,这款换上全新风格 ...

  5. 一加点击android系统时间,终于等到你!一加发布国内首个Android P定制系统 一加6抢先体验...

    原标题:终于等到你!一加发布国内首个Android P定制系统 一加6抢先体验 目前国产手机采用的都是安卓系统,由于某些不可抗力的因素,安卓原生系统在国内很多功能都无法正常使用,因此国产手机采用谷歌的 ...

  6. android theme material,Android Studio 换主题(Material Theme..)

    1.去如下网址下载自己喜欢的主题文件xx.jar http://color-themes.com/?view=index 2. 导入方式 下载主题-xxx.jar 注意:如果我们下载下来的jar名字如 ...

  7. uikit框架开发前期配置及定制主题方法。

    要使用npm命令需要先安装nodejs. 安装方法网上有很多,在此就不一一例举了. 1. 安装Gulp > npm install -g gulp 首先需要在全局范围安装gulp 用git下载U ...

  8. android 5.0主题风格研究

    虽然关于Material Design开发的文章已经很多了,我也转载和翻译了一些,但是在实际应用过之后才感叹,"实践才是检验真理的唯一标准". 通常,我们使用5.0的主题风格是利用 ...

  9. Android样式和主题(二):系统有哪些主题

    Android系统自带Theme 简介 Android系统在4.0之前没有设计可言,打开APP就是黑乎乎一片,这是最原始的Theme主题 在Android4.0有了Holo主题,Holo本身继承于Th ...

最新文章

  1. 【Spring学习笔记】之【3.3 DI的深入 二】
  2. Python编程基础:第二十四节 作用域Scope
  3. “进度条”博客——第四周
  4. Java笔记:包装类、toString()方法、单例类、比较(==和equals方法)
  5. weblogic作为linux服务器,weblogic在linux服务器上部署应用
  6. WPF下递归生成树形数据绑定到TreeView上
  7. java对机房有什么用_使用云终端建设的云机房相比传统机房有什么区别
  8. iPhone SDK开发基础之 OpenFlow编程
  9. 安装R和Rstudio win10
  10. 心心念念的安卓简单和多功能计算器来了
  11. C++常见设计模式之工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)
  12. Invalid MEX-file '/xxx/lk.mexa64': /xxx/anaconda3/lib/./libharfbuzz.so.0: undefined symbol: FT_Done_
  13. 04 CoCos Creator-Please make sure java is installed and JAVA_HOME
  14. 快速有效分离RNA——土壤RNA纯化试剂盒
  15. 《愿你历尽千帆 归来仍是少年》 读后
  16. tinyxml2库的使用
  17. euclidea教程_Euclidea - 有一种浪漫叫欧氏几何 - iPhone应用 - 【最美应用】
  18. python教学小说05 宽容之心,是容纳世界的神奇变量。
  19. 苹果手机app应用显示未受信任打不开怎么办
  20. OnePlus一加 || 最强出海营销,你不得不服

热门文章

  1. STM8-STVD+Cosmic编译输出信息参数配置
  2. 2020年北京理工大学计算机学硕跨考上岸经验分享
  3. Python数据拟合幂函数y=ax^b
  4. TCP BBR Startup gain计算总结和Startup失速问题
  5. RIP、OSPF、BGP、动态路由选路协议、自治域AS
  6. PDFlib 开发指南
  7. .net5 开启Lucene的全文搜索之旅
  8. java数据之头尾链表
  9. 关于Blurry无法加载的问题
  10. 机器学习在无线信道建模中的应用现状与展望