菜鳥學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指定屬於哪一組。更多詳細信息,大家自行查閱代碼吧。

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