在使用 Hierarchy Viewer 后失受,我可以看到當(dāng)前面界面的架構(gòu)颜骤,而從中我發(fā)現(xiàn)了阁苞,我們自己寫的布局其實只是整個布局的一部分妒挎,而真正的根布局是一個叫 DecorView 的家伙。
DecorView 繼承自 FrameLayout仇让,如果我們想獲取到根布局 DecorView典奉,需要調(diào)用 Activity 的 getWindow().getDecorView(),當(dāng) Activity 創(chuàng)建的時候會默認和一個 Window 關(guān)聯(lián)丧叽,而 DecorView 其實就是 Window 的根布局卫玖。
以我在 Hierarchy Viewer 中所見到的布局結(jié)構(gòu),DecorView 下面其實有三部分蠢正,分別為:
- LinearLayout(對應(yīng)圖中1)
- 狀態(tài)欄(對應(yīng)圖中2)
- 底部導(dǎo)航欄(對應(yīng)圖中3)
不好意思畫的確實有些難看
如果你處于調(diào)試的模式可以獲取 DecorView 后骇笔,去調(diào)用 getChildAt() 去看看這三個的順序,下標【0】對應(yīng)的 LinearLayout嚣崭,下標【1】對應(yīng)的 底部導(dǎo)航欄,下標【2】對應(yīng)的狀態(tài)欄懦傍,所以如果你調(diào)用了移除 View 的方法雹舀,那么最先被移除的是底部的導(dǎo)航欄,然后依次類推粗俱。
而我們自己布局就在 LiearLayout 下面说榆,當(dāng)然標題欄也是,通過 Hierarchy Viewer,也就能完整的看到 Activity 的視圖架構(gòu)签财,而它的功能還不止于此串慰。