1. 程式人生 > >android View 之Android控制元件架構

android View 之Android控制元件架構

1、 Android控制元件架構

Android控制元件的層次是由android.view.   View(檢視類)類呈現出最基本的UI架構;一個檢視

佔據一個螢幕的矩形區域,並負責事件繪畫與事件的處理。View是Widgest的基類,常用來建立與使用者互動的影象介面(GUI)。檢視有眾多的拓展者,包括文字檢視(TextView),影象檢視(ImageView),進度條(ProgressBar),檢視元件(ViewGroup)等。如下圖:


ViewGroup控制元件作為父控制元件可以包含多個View控制元件,並管理其包含的View控制元件。通過ViewGroup,整個介面形成了一個樹形結構,上層控制元件負責下層控制元件的測量與繪畫,並傳遞互動事件。通常一個Activity中使用findViewBuyId()方法,就是控制元件樹已樹的深度優先遍歷查詢對應的元素。在每棵樹的頂部都有一個ViewParent物件,這就是這個樹的控制核心,所有互動管理事件都是由它來統一排程和分配。

每個activity都包含一個window 物件,在android中window物件通常由PhoneWindow來實現。PhoneWindow將一個DecorView設定為整個應用的視窗的根View,即為整個PhoneWindow最頂層的View;DecorView將要顯示的具體內容呈現在PhoneWindow上,這裡的所有的View的監聽事件,都通過WindowManagerService來進行接收,並通過Activity的物件來回調響應的OnClickLisener。在顯示上,它將螢幕分成兩個部分,一個是TitleView,一個是ContentView;

DecorView根據Mainifest的Theme或者在PhoneWind中設定的Flag來確定Layout,來作為根檢視。在Activity中,當建立後,系統會呼叫attach方法,將其新增到ActivityThread當中,在Attach方法中建立了一個Window物件,要注意的是,window物件建立時,並沒有建立Décor物件, 當在程式在onCreate()中呼叫了setContentView()方法時,會檢測DecorView是否存在,如果不存在則建立DecorView,並將  View新增到DecorView中。同時在呼叫setContentView()方法後ActivityMangerService會回撥onResume()方法,此時系統會把整個的DecorView新增到PhoneWindow中,並顯示出來,從而完成最終介面的繪製。


一般DecorView下的只有一個子元素LinerLayout,當然DecorView的子元素layout是根據theme來的,LinerLaout中包含通知欄,標題欄、內容欄等;LinerLayout裡面包含一個內容的FrameLatout  ,比如內容的FrameLatout 可以通過

FrameLatout  myFragment=( FrameLatout )findBuyId(android.R.id.content)獲取得到