Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android界面架構(Activity,PhoneWiondow,DecorView)簡介,activitydecorview

Android界面架構(Activity,PhoneWiondow,DecorView)簡介,activitydecorview

編輯:關於android開發

Android界面架構(Activity,PhoneWiondow,DecorView)簡介,activitydecorview


 

 

  在一個Android應用程序中,用戶界面通過View和ViewGroup對象構建。所有View的子類成為”Widget”,所有ViewGroup的子類成為”Layout”。View和ViewGroup之間采用了組合設計模式。ViewGroup作為布局容器類的最上層,布局容器裡面又可以有View和ViewGroup。

 

ViewGroup和View的組合關系如下圖:

 

ViewGroup和View的繼承關系如下圖:

 

 

當啟動Activity的時候,有一個setContentView()方法,Activity其實不是顯示視圖,實際上Activity調用了PhoneWindow的setContentView()方法,然後加載視圖,將視圖放到這個Window上,而Activity其實構造的時候初始化的是Window(PhoneWindow),Activity其實是個控制單元,即可視的人機交互界面(Activity其實不是顯示視圖,View才是真正的顯示視圖)。

 

 

每個Activity包含一個PhoneWindow對象,PhoneWindow設置DecorView為應用窗口的根視圖,所有的UI部件都是放在DecorView中。在裡面就是熟悉的TitleView和ContentView,平時使用的setContentView()就是設置的ContentView。

 從用戶角度來看,Android是個多窗口的操作系統,不同尺寸的窗口區域根據尺寸,位置,z-order及是否透明等參數 疊加起來一起並最終呈現給用戶。這些窗口既可以是來自一個應用,也可以來自與多個應用,這些窗口既可以顯示在一個平面,也可以是不同的平面。總而言之,窗 口是有層次的顯示區域,每個窗口在底層最終體現為一個個的矩形Buffer, 這些Buffer經過計算合成為一個新的Buffer,最終交付Display系統進行顯示。

 

Activity,PhoneWiondow,DecorView的關系如下圖:

 

 

 

  • Window 類

  位於 /frameworks/base/core/java/android/view/Window.java。該類是一個抽象類,提供了繪制窗口的一組通用API。可以將之理解為一個載體,各種View在這個載體上顯示。

  • PhoneWindow類

  位於/frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindow.java。該類繼承於Window類,是Window類的具體實現,即我們可以通過該類具體去繪制窗口。並且,該類內部包含了一個DecorView對象,該DectorView對象是所有應用窗口(Activity界面)的根View。 簡而言之,PhoneWindow類是把一個FrameLayout類即DecorView對象進行一定的包裝,將它作為應用窗口的根View,並提供一組通用的窗口操作接口。

  • DecorView類

  該類是PhoneWindow類的內部類。該類是一個FrameLayout的子類,並且是PhoneWindow的子類,該類就是對普通的FrameLayout進行功能的擴展,更確切點可以說是修飾(Decor的英文全稱是Decoration,即“修飾”的意思),比如說添加TitleBar(標題欄),以及TitleBar上的滾動條等 。最重要的一點是,它是所有應用窗口的根View 。

 

 

打個比喻:

Activity是一個工人,它來控制Window;Window是一面顯示屏,用來顯示信息;View就是要顯示在顯示屏上的信息,這些View都是層層重疊在一起(通過infalte()和addView())放到Window顯示屏上的。而LayoutInfalter就是用來生成View的一個工具,XML布局文件就是用來生成View的原料

 

 

 

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