Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android編程入門 >> Android 控件架構

Android 控件架構

編輯:Android編程入門

  如果說Android上的app是一個有血有肉的人的話,那麼人靠衣裝馬靠鞍,那麼控件就是把app裝扮的漂漂亮亮的“衣服”。那麼安卓的控件到底是如何架構,又是如何渲染的了。

  無論是什麼控件,在Android中控件只有兩種,一種就是View,另一種是ViewGroup。ViewGroup控件組,一個控件的百寶箱,可以包含各種各樣的控件組,它不僅能夠包含控件還能夠管理著控件。通過ViewGroup,整個控件就至上而下的形成了樹形結構,即我們通常所說的控件樹;父控件負責相應子控件的繪制與測量,並向其傳遞交互事件。安卓系統怎麼准確無誤的找到每一個控件?只需要調用findViewbyid的方法就能夠按照深度優先的方法找到每一個控件了。在每個控件樹最頂端,都站立了一個Viewparent對象,這個對象也是這顆控件樹的核心,所有的交互管理事件都是由這個大大負責統一分配和調度,從而起這一個整體宏觀調控的效果。一個控件樹架構如圖所示:

  做過Android開發都知道,要使一個activity顯示相應的布局文件,都必須要setContentView。我們要看一下setContentView背後到底發生了什麼,Android又是如何將其渲染出來的了。要解答這些問題,我們還是要了解Android的界面架構圖。具體的架構圖如圖所示:

  通過上圖所示,我們可以得出這樣的結論。

  ①每個activity都有一個window對象。

  ②而每一個window對象通常是由PhoneWindow來實現。

  ③每個PhoneWindow對象包含DecorView這個根視圖對象,將其視圖展示都是通過這個對象顯示到PhoneWindow上。

  ④而DecorView被一分為二,一個是TitleView,一個ContentView,TitleView顯示相應的標題,ContentView顯示具體布局,這些應該大家很熟悉。

  這樣架構也可以建立一個上文提到的視圖樹,這顆視圖樹長成這個樣子:

 

  這樣控件樹,能夠幫我們解答這樣一個問題為什麼requestWindowFeature()一定要在setContentView之前調用才能起效。這是由於TitleBar下面才是ContentView,在ContentView之後設置,這時,只能有ContentView。當程序在oncreate方法調用setcontentView後會調用onResume方法,此時系統會把整個DecorView添加到PhoneWindow中,最終將視圖顯示出來。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved