Android O Settings原始碼流程分析(介面渲染篇)
Android O Settings
Settings 渲染fragment(選單之間的跳轉)
在Activity中填充fragment的方法主要為SettingActivity中的SwitchToFragment()
給mFragmentClass賦值為AndroidManifest.xml中的<meta-data>標籤中key為 META_DATA_KEY_FRAGMENT_CLASS的的值
getMetaData() 方法
程式碼如下:
這個函式的主要作用就是從Activity標籤中獲取meta-data標籤中key為com.android.settings.FRAGMENT_CLASS的值,並將其賦值給mFragmentClass
構建一個intent併為其增加一個特殊的鍵值對
key:settings:show_fragment(EXTRA_SHOW_FRAGMENT),
value:mfragmentClass指定的類名
所以要先執行getMetaData,是因為mFragmentClass賦值是在getMeatData中進行的。
判斷佈局
判斷當前類是否為Settings.class或者是其他子選單,即進入方式為點選launcher上的圖示進入的主設定介面
接下來看launchSettingFragment()方法:
initialArguments通過賦值儲存了meta-data中指定的value值。
在 SwicthToFragment實現渲染
載入DashboardSummary(Fragment)顯示一級選單頁面;
其他的則載入子選單頁面;
switchToFragment()方法:
先判斷fragment是否合法,然後將方法中傳入的Fragment進行例項化,通過replace(fragment)進行渲染。
通過上面的分析,我們應該瞭解的事情是,AndroidManifest中每個Activity其meta-data中的資料都是很有用的,特別是com.android.settings.FRAGMENT_CLASS對應的鍵值對,指定了其所在Activity的真正佈局實現。其實,也是完成了從其他包的Activity向Settings中fragment的跳轉實現。