其實(shí)寫(xiě)這篇文章只是為了更好地理解android界面的結(jié)構(gòu)罷了棋恼,同時(shí)也是為了更多猿友知道有這么回事竭业。
背景:
之前自己很少關(guān)注android界面層次的稀余,因?yàn)楹苌賹?xiě)些第三方的庫(kù)邦邦。最近看了張洪洋的Highlight(一個(gè)高亮顯示view的庫(kù))庫(kù)安吁,里面涉及到了activity視圖布局的代碼,因此自己就著手看了下界面的布局層次燃辖,這里介紹下sdk中自帶的視圖工具(uiautomatorviewer)鬼店,詳細(xì)見(jiàn)(sdk-->tools--> uiautomatorviewer),這里在用之前需要電腦連上手機(jī)黔龟,因?yàn)樵摴ぞ邥?huì)自動(dòng)獲取當(dāng)前手機(jī)顯示的界面妇智。
這里給張我的截圖,在測(cè)試某個(gè)界面時(shí)獲取到的層次結(jié)構(gòu):
這里的ViewGroup就是系統(tǒng)為我們生成的view,id是decor_content_parent氏身,
在代碼中獲取該view的方式可以是:
View decorView = ((Activity) context).getWindow().getDecorView();
其實(shí)這里獲取到的view是我們?cè)?strong>PhoneWindow類中可以見(jiàn)到的巍棱,是PhoneWindow里面的一個(gè)內(nèi)部類DecorView,這里就不贅述DecorView內(nèi)部都做了些啥蛋欣,詳細(xì)去** PhoneWindow類中看 DecorView**
該view下面涵蓋了兩個(gè)FramLayout航徙,一個(gè)是我們常用的actionBar部分,可見(jiàn)圖:
另外一個(gè)就是我們真正顯示內(nèi)容的部分豁状,也就是我們Content捉偏,可見(jiàn)圖:
其實(shí)我們最多關(guān)心的還是Content了,因?yàn)槲覀兘?jīng)常需要?jiǎng)討B(tài)往Content中添加布局了泻红,所以第一步肯定是需要獲取Content了夭禽,獲取Content經(jīng)常有如下方式:
activity中直接獲取:
View content=findViewById(android.R.id.content)
也可以通過(guò)上面介紹的DecorView來(lái)獲取:
View decorView = ((Activity) context).getWindow().getDecorView();
View content=((ViewGroup)decorView).findViewById(android.R.id.content);
這里很好理解嘛,因?yàn)?strong>Content是decorView的第二個(gè)孩子谊路,因此也可以通過(guò)decorView獲取了讹躯。