摘要 在 App 運(yùn)行過(guò)程中,我們的視圖層級(jí)可能會(huì)由于用戶的操作一直在發(fā)生改變,甚至可能會(huì)有一些出乎預(yù)料的變化,本文將會(huì)介紹如何進(jìn)行Android 視圖實(shí)時(shí)分析,分析 View 的視圖層級(jí)及屬性變化。 引題
首先,筆者先來(lái)一個(gè)簡(jiǎn)單的 Demo 實(shí)例。我們使用 Android Studio 新建一個(gè) Empty Android 工程,跑一下程序,界面如下圖所示: 接下來(lái),我們要對(duì)視圖層級(jí)進(jìn)行分析,但分析之前先給各位介紹兩個(gè)視圖分析工具。 1.Android SDK 中 tools 包下的 hierarchyviewer,最終展現(xiàn)的視圖效果如下: 2.Android Studio 也有自帶的視圖分析工具 Layout Inspector(布局檢查器),打開(kāi)方式如下圖所示: 可以看到 Layout Inspector 最右側(cè)的屬性欄可以查看每一個(gè) View 的所附帶的屬性及屬性值。
正文 一.視圖層級(jí)分析從根視圖開(kāi)始分析視圖層級(jí),如下圖所示:
DecorView 的第一個(gè)子 View(LinearLayout), 如下圖所示:
DecorView 的第二個(gè)子 View(View),如下圖所示:
DecorView 的第三個(gè)子 View(View),如下圖所示:
至此,DecorView的最外層View全部分析完畢。 接下來(lái),分析 DecorView 的第一個(gè)子View(LinearLayout),如下圖所示:
ViewStub的屬性信息,如下圖所示:
FrameLayout的屬性信息,如下圖所示:
接下來(lái),繼續(xù)分析FrameLayout的子View,如下圖所示:
ContentFrameLayout的視圖屬性,如下圖所示:
ActionBarContainer的視圖屬性,如下圖所示:
不過(guò),還有個(gè)問(wèn)題需要提醒一下,不同機(jī)型,不同系統(tǒng)主題設(shè)置生成的視圖結(jié)構(gòu)可能會(huì)不一樣,舉兩個(gè)例子: 例一:筆者把使用的模擬器換成自己的手機(jī)(360N5 Android 6.0.1),運(yùn)行后視圖布局如下: 可以看到筆者的手機(jī)是沒(méi)有NavigationBar(底部導(dǎo)航欄)的。 例二:筆者把Activity的主題"Theme.AppCompat.Light.DarkActionBar"換成無(wú)標(biāo)題欄主題"Theme.AppCompat.Light.NoActionBar",運(yùn)行后視圖布局如下: 可以看到視圖結(jié)構(gòu)與我們之前分析的相比,發(fā)生了一些變化。 最后,還有個(gè)細(xì)節(jié)給各位補(bǔ)充下:Layout Inspector 只能分析出Android Studio當(dāng)前“正在運(yùn)行的APP”的視圖布局結(jié)構(gòu),其他應(yīng)用的視圖布局結(jié)構(gòu)是無(wú)法顯示的。 如果我們想要分析一個(gè)第三方應(yīng)用(如:微信、QQ)的視圖結(jié)構(gòu)可以使用Android Device Monitor(安卓設(shè)備監(jiān)視器),具體打開(kāi)步驟如下圖所示: 以QQ為例,我們先打開(kāi)手機(jī)QQ,顯示出QQ主界面,然后按照下圖的"紅色圈選",依次點(diǎn)擊,當(dāng)前的視圖結(jié)構(gòu)就出來(lái)了,但是相比于Layout Inspector工具,視圖屬性信息提供的較少... 視圖層級(jí)分析到此結(jié)束,有時(shí)間再補(bǔ)篇源碼,分析一下布局加載的流程。 題外話 寫這篇文章的時(shí)候被 IOS 同事嘲諷了,它們吐槽 Android 的視圖分析工具太渣,最后對(duì)比看了下,Android 的視圖分析工具確實(shí)沒(méi)有IOS 的高大上......╮(╯▽╰)╭ 最后,秀一下 IOS 的視圖分析工具 Reveal,如下圖所示: 福利 福利 福利 留言 + 點(diǎn)廣告,留言點(diǎn)贊前五的本周三中午平分今天的廣告收益哈! 與之相關(guān) 日 更 精 彩 微信號(hào):code-xiaosheng 公眾號(hào) 「code小生」 |
|
來(lái)自: codingSmart > 《待分類》