- 在代碼中,當程序在onCreat()方法中調用setContentView()方法後,ActivityManagerService會回調onResume()方法,此時系統會把整個DocrView添加到PhoneWindow中,並讓其顯示出來。
Android 控件架構和全屏顯示
概念:
Android中所有控件在界面中佔得位置均是矩形,分爲ViewGroup和View,通過ViewGoup使整個界面形成了一個樹形結構,由上層控件負責下層子控件的測量和繪製,並傳遞交互事件。每棵樹控件的頂部,都有一個ViewParent對象。
我們所用的所有控件都是直接或間接繼承自View的,所用的所有佈局都是直接或間接繼承自ViewGroup的。
Android控件樹結構圖:
ViewGoup:可包含多個子控件,並管理其包含的子控件
ViewParent:控件樹的核心,調度和分配所有的交互管理事件
Android界面架構圖:
由上圖可看出,每個Activity中都包含一個Window對象,在Android中Wiondw對象通常由PhoneWindow來實現。
PhoneWindow:將一個DecorView設置爲整個應用窗口的根View,來顯示具體的界面內容
DecorView:窗口界面的頂層視圖,裏面封裝了一些窗口操作的通用方法,其把將要顯示的具體內容呈現在了PhoneWindow上,在此所有的View的事件監聽,都通過WindowManagerService(窗口管理服務http://blog.csdn.net/luoshengyang/article/details/8462738)來進行接收,並通過Activity對象來回調相應的onClickListener。
在顯示上,DecorView將屏幕分爲TitleView和ContentView兩部分。
ContentView:是一個ID爲content的FrameLayout,activity_main.xml就是設置在這樣一個FramLayout中的。
DocrView標準視圖樹:
視圖樹的第二層裝載了一個LinearLayout,作爲ViewGroup,這一層的佈局結構會根據對應的參數設置不同的佈局,如最常用的佈局--上面顯示TitleBar下面是Content這樣的佈局,也就是上圖的佈局。而如果用戶通過設置requestWindowFeature(Window.FEATURE_NO_TITLE)來設置全屏顯示,視圖樹中就只有Content了,所以requestWindowFeature()方法一定要在調用setContentView()方法之前。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.