Android窗口機(jī)制(一)初識(shí)Android的窗口結(jié)構(gòu)

Android窗口機(jī)制系列

Android窗口機(jī)制(一)初識(shí)Android的窗口結(jié)構(gòu)
Android窗口機(jī)制(二)Window,PhoneWindow,DecorView,setContentView源碼理解
Android窗口機(jī)制(三)Window和WindowManager的創(chuàng)建與Activity
Android窗口機(jī)制(四)ViewRootImpl與View和WindowManager
Android窗口機(jī)制(五)最終章:WindowManager.LayoutParams和Token以及其他窗口Dialog,Toast

窗口結(jié)構(gòu)

Paste_Image.png

說(shuō)明

  • 每一個(gè)Activity都包含一個(gè)Window對(duì)象,Window對(duì)象通常由PhoneWindow實(shí)現(xiàn)
  • PhoneWindow:將Decoriew設(shè)置為整個(gè)應(yīng)用窗口的根View。是Window的實(shí)現(xiàn)類。它是Android中的最基本的窗口系統(tǒng),每個(gè)Activity 均會(huì)創(chuàng)建一個(gè)PhoneWindow對(duì)象,是Activity和整個(gè)View系統(tǒng)交互的接口。
  • DecorView:頂層視圖,將要顯示的具體內(nèi)容呈現(xiàn)在PhoneWindow上. DecorView是當(dāng)前Activity所有View的祖先,它并不會(huì)向用戶呈現(xiàn)任何東西,它主要有如下幾個(gè)功能,可能不全:
    • A. Dispatch ViewRoot分發(fā)來(lái)的key、touch、trackball等外部事件;
    • B. DecorView有一個(gè)直接的子View,我們稱之為System Layout,這個(gè)View是從系統(tǒng)的Layout.xml中解析出的,它包含當(dāng)前UI的風(fēng)格,如是否帶title、是否帶process bar等。可以稱這些屬性為Window decorations。
    • C. 作為PhoneWindow與ViewRoot之間的橋梁,ViewRoot通過(guò)DecorView設(shè)置窗口屬性。//可以這樣獲取 View view = getWindow().getDecorView();
    • DecorView只有一個(gè)子元素為L(zhǎng)inearLayout。代表整個(gè)Window界面,包含通知欄,標(biāo)題欄,內(nèi)容顯示欄三塊區(qū)域。DecorView里面TitleView:標(biāo)題,可以設(shè)置requestWindowFeature(Window.FEATURE_NO_TITLE)取消掉ContentView:是一個(gè)id為content的FrameLayout。我們平常在Activity使用的setContentView就是設(shè)置在這里,也就是在FrameLayout上

下篇文章將跟大家講解他們的是如何聯(lián)系的,以及他們的理解。
Android窗口機(jī)制(二)Window,PhoneWindow,DecorView,setContentView源碼理解:http://www.itdecent.cn/p/e42b638944ae

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容