最近一直忙着项目上的活计,没啥心思关注博客,前两天屌丝逆袭,

看了一场你的名字,深深感叹叔叔辈的无奈啊,

青葱憧憬爱情的年华,垂老怀旧相依的岁月,

而我老未及老,幼以过幼,

哎,白瞎了一张电影票。

上回我们基于Android M以前版本的源码,了解并学习了Android M中Settings Menu Tree( PS:主界面)的组织流程,我们知道在Android M及其以前的系统中,Settings界面依赖于自定义ViewGroup来实现,所有item的配置依赖于资源XML文件提供,也就是我们想添加或删除一个主界面的条目,操作XML文件即可(PS:不了解的小伙伴可以前往第一篇中学了解)。而随着Android N(PS:下文中的N 指的均为Android 7.0版本,7.1又有新的更改)的release,关于Settings是否有重大更新呢?

下面让我们一起走进Android N Settings的世界。首先来一张Android N Settings的截图:

在上图中,并不能完整反映Android N Settings界面效果,因此我做了如下处理:

上图中我添加了Suggestions上方的Condition部分,从上图我们可以看出,Settings主界面由Conditions,Suggestions和Main Menu三部分组成,那么这三部分的实现方式是怎样的呢?

学习思路仍然不变,首先找准Manifest文件,查找应用入口(Action Launcher Activity),部分Manifest文件如下图,入口已标示:

通过上图可以看出,整个应用入口仍然是Settings.java类,打开Settings,java,摘取部分代码如下:

从上图看出,Settings,java实际上是一个静态Class 的集合,那么所有的初始化操作自然在其父类实现,追踪继承关系,打开SettingsActivity.java,查看其onCreate函数,摘录部分如下:

从上面我们可以看出刚开始主界面是转入DashboardSummary.java这个Fragment的界面,继续进入DashBoardSummary.java,查看其onCreate函数,部分代码如下:

以上代码就完全可以看出我们的主Menu Tree上的所有列表信息,来源于getDashboardCategries()这个函数,查看这个函数的声明,发现其位于SettingsDrawerActivity.java中,详细代码如下:

上图代码阐述了所有列表信息来源于TileUtils类的getCategroies()类,进一步查看该类代码:

我们在这个类的内部深究,会发现,其实所有的列表项都是从AndroidManifest.xml文件中解析得到的,具体的解析配置会涉及到如下两块:

android:value="com.android.settings.category.wireless" />

其中intent-filter指定在同一组的排序,meta-data指定属于哪一组。更多详细信息,大家自行查阅代码吧。

android settings 源码,菜鸟学Android源码-Settings(2)相关推荐

  1. 菜鸟学Android源码——Setting(1)

    菜鸟学Android源码--Setting(1) 在上一篇中,我简单介绍了Android源码的下载和编译,还没有下载编译源码的小伙伴请看这里:Android源码分析之--下载并编译源码 关于系统设置A ...

  2. java int类源码,一起学JDK源码 -- Integer类

    Integer类为java基本类型int的包装类,除了前面提到的Byte类,Short类中的大部分方法,Integer类中还提供了很多处理int类型的方法,接下来就让我们一起看看吧. 基础知识: 1. ...

  3. java安卓编程计算器_菜鸟学Android编程——简单计算器《一》

    菜鸟瞎搞,高手莫进 本人菜鸟一枚,最近在学Android编程,网上看了一些视频教程,于是想着平时手机上的计算器应该很简单,自己何不尝试着做一个呢? 于是就冒冒失失的开撸了. 简单计算器嘛,功能当然很少 ...

  4. 菜鸟学Android之简介

    最近要做物联网实训,选的题目是<基于安卓的企业办公环境测控系统软件设计>(名字还挺长~),所以安卓菜鸟开始从头学习安卓.学习第一步,肯定是要对Android整个体系有个整体的认知,此为该文 ...

  5. android 事件驱动编程,跟我学android之四 事件驱动模型

    Android事件驱动模型需要深刻学习和理解,事件驱动模型三要素如下: 事件驱动模型事件源:事件的制造者,如:按钮通常会拥有注册和取消监听器的功能监听器:事件的接收者,通常是自己编写的类的对象一个实现 ...

  6. Carson带你学Android:源码解析自定义View Draw过程

    前言 自定义View是Android开发者必须了解的基础 网上有大量关于自定义View原理的文章,但存在一些问题:内容不全.思路不清晰.无源码分析.简单问题复杂化 等 今天,我将全面总结自定义View ...

  7. 暑期Android游戏开发——小兔子跳铃铛(附源码)

    暑期Android游戏开发--小兔子跳铃铛(附源码) 一. 背景说明 我在南京的一所高校学习软件工程.学院里每年会举行一次"创新杯"软件比赛,鼓励同学自主学习和创新.我和几个好兄弟 ...

  8. 【Android WebSocket】Android 端 WebSocket 基本用法 ( 下载 Java-WebSocket源码 | 导入 Java-WebSocket-1.5.2 工程作为依赖 )

    文章目录 一.下载 Java-WebSocket 源码 二.Android Studio 工程导入 Java-WebSocket 源码 使用 https://github.com/TooTallNat ...

  9. 命令构建gradle项目_【Android 修炼手册】Gradle 篇 -- Gradle 源码分析

    预备知识 理解 gradle 的基本开发 了解 gradle task 和 plugin 使用及开发 了解 android gradle plugin 的使用 看完本文可以达到什么程度 了解 grad ...

最新文章

  1. js字符串的字典序_JavaScript通过字典进行字符串翻译转换的方法
  2. 剑指offer:把数组排成最小的数
  3. 合格的CTO应该是什么样?雷军王海峰王小川等共谈「技术创新」| CNCC2020
  4. python yield 详解
  5. python末位1的位置_用Python黑了整个学院学姐的电话和QQ,爬虫牛皮!兄弟们耗子尾之!...
  6. java实现 SSL双向认证
  7. 3.JDK和JRE和JVM的区别
  8. 不超过20位的小数正则_意甲身价最贵的20位球星,国米多达7人超过尤文,夺冠成硬任务...
  9. java哈夫曼_用 JAVA 实现哈夫曼树(Huffman Tree)
  10. hdu 2883 kebab 网络流
  11. Matlab RRT算法三维轨迹规划及贪心算法轨迹优化
  12. 飞信怎么登陆总是显示服务器错误咋回事,手机飞信无法登陆怎么办 飞信无法登陆解决方法...
  13. 光学字符识别引擎 tesseract-ocr 简介
  14. Liunx配置tomcat
  15. excel中以文本形式保存长数字
  16. 认识css长度单位 px % em rem vh vw
  17. 从MySQL数据库中查询某个数据库某个表中字段
  18. 关于MNN中图像预处理
  19. JESD204B IP核的配置与使用
  20. 指纹识别综述(10): 深度学习方法

热门文章

  1. 创建Session时会把含有Session ID 的Cookie对象加到响应对象上
  2. mysql account locked_ORA-28000: the account is locked用户锁定问题排查解决
  3. oracle解锁用户实例,在Oracle 11G R2里启用示例帐户scott
  4. 计算机系毕业生自我评价,计算机系应届毕业生自我评价范文
  5. aws s3 獲取所有文件_前端上传文件到Aws S3文件服务器
  6. 高品位登录页面,优秀案例给你灵感!
  7. 想要应急稳妥过稿电商海报,这组素材少不了!
  8. 电商移动促销页面设计素材PSD分层模板,轻松出稿稿
  9. UI展示样机素材|让作品看起来毫无痕迹,还原场景!
  10. java volatitl_Java中的关键字volatitle