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