菜鸟学Android源码-Settings(2)

最近一直忙着项目上的活计,没啥心思关注博客,前两天屌丝逆袭,
看了一场你的名字,深深感叹叔叔辈的无奈啊,
青葱憧憬爱情的年华,垂老怀旧相依的岁月,
而我老未及老,幼以过幼,
哎,白瞎了一张电影票。

上回我们基于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

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

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

学习思路仍然不变,首先找准Manifest文件,查找应用入口(Action Launcher Activity),部分Manifest文件如下图,入口已标示:
Settings Android Manifest
通过上图可以看出,整个应用入口仍然是Settings.java类,打开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文件中解析得到的,具体的解析配置会涉及到如下两块:

<meta-data android:name="com.android.settings.category"
                android:value="com.android.settings.category.wireless" />
<intent-filter android:priority="4">
                <action android:name="com.android.settings.action.SETTINGS" />
            </intent-filter>

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章