android.app.Activity
對于一個Android應用來說,android.app.Activity類執行個體是一個最基本的功能單元。一個Activity執行個體可以做很多的事情,但是它本身無法顯示在螢幕上,而是借助于Viewgroup和View,這兩個才是Android平台上最基本的兩個使用者界面表達單元。
android.view.ViewGroup
ViewGroup是一個特殊的View類,它繼承于android.view.View。它的功能就是裝載和管理下一層的View對象和ViewGroup對象。ViewGroup是布局管理器(layout)及view容器的基類。
ViewGroup中,還定義了一個嵌套類ViewGroup.LayoutParams。這個類定義了一個顯示對象的位置、大小等屬性,view通過LayoutParams中的這些屬性值來告訴父級,它們将如何放置。
在這裡,繼承于ViewGroup的一些主要的布局類如下:
1、FrameLayout:最簡單的一個布局對象。它裡面隻顯示一個顯示對象。所有的顯示對象都将會固定在螢幕的左上角,不能指定位置。但允許有多個顯 示對象,但後一個将會直接在前 一個之上進行覆寫顯示,把前一個部份或全部擋住(除非後一個是透明的)。
2、LinearLayout:以單一方向對其中的顯示對象進行排列顯示,如以垂直排列顯示,則布局管理器中将隻有一列;如以水準排列顯示,則布局管理器中将隻有一行。同時,它還可以對個别的顯示對象設定顯示比例。
3、TableLayout:以擁有任意行列的表格對顯示對象進行布局,每個顯示對象被配置設定到各自的單元格之中,但單元格的邊框線不可見。
4、AbsoluteLayout:允許以坐标的方式,指定顯示對象的具體位置,左上角的坐标為(0, 0),向下及向右,坐标值變大。這種布局管理器由于顯示對象的位置定死了,是以在不同的裝置上,有可能會出現最終的顯示效果不一緻。
5、RelativeLayout:允許通過指定顯示對象相對于其它顯示對象或父級對象的相對位置來布局。如一個按鈕可以放于另一個按鈕的右邊,或者可以放在布局管理器的中央。
在Android中,提供了很多的布局管理器,這裡也不一一列舉,開發者可以根據實際需要,選擇合适的布局管理器。
android.view.View
View是所有view類的基類,一個view通常占用螢幕上的一個矩形區域,并負責繪圖及事件處理。View是所有窗體部件的基類,是為窗體部件服務的,這裡的窗體部件即UI控件,如一個按鈕或文本框。Android已經為我們提供了一系列的标準UI控件供我們直接使用,同時,我們也可以通過繼承于 View類或View的子類,來實作我們自定義的UI控件。
要定制我們自己的UI控件,需要重載View類中的一些方法,以下表格列出View提供出來的,供重載的方法,這些方法不必都要重載,但至少要實作onDraw(android.graphics.Canvas)方法。
類别
方法
描述
Creation
Constructors
onFinishInflate()
當View和它的所有子對象從XML中導入之後,調用此方法
Layout
onMeasure(int, int)
View會調用此方法,來确認自己及所有子對象的大小
onLayout(boolean, int, int, int, int, int, int)
當View要為所有子對象配置設定大小和位置時,調用此方法
onSizeChanged(int, int, int, int)
當View大小改變時,調用此方法
Drawing
onDraw(Canvas)
當View要繪制它的内容時,調用此方法
Event processing
onKeyDown(int, KeyEvent)
當一個新的按鍵事件發生時,調用此方法
onKeyUp(int, KeyEvent)
當一個按鍵釋放事件發生時,調用此方法
onMotionEvent(MotionEvent)
當一個動作事件(如觸摸)發生時,調用此方法
Focus
onFocusChanged(boolean, int)
當View獲得或失去焦點時,調用此方法
Attaching
onAttachedToWindow()
當View附加到一個窗體上時,調用此方法
onDetachedFromWindow()
當View離開它的窗體時,調用此方法
當你為一個 activty 添加一個可見的 view, 并且運作這個activty時,android通常情況下會自動按照下列順序來觸發view的相關事件
onAttachedToWindow
onMeasure
onSizeChanged
onLayout
onDraw
對于Android應用中的一個螢幕,它的螢幕元素是按層次結構來描述的。要将一個螢幕元素層次樹綁定在一個螢幕上顯示,Activity會調用它的 setContentView()方法并且傳入這個層次樹的根節點引用。當Activity被激活并且獲得焦點時,系統會通知activity并且請求根節點去計算并繪制樹,根節點就會請求它的子節點去繪制它們自己。
每個樹上的ViewGroup節點會負責繪制它的子節點。ViewGroup會計算它的有效空間,布局所有的子顯示對象,并最終調用所有的子顯示對象的 Draw()方法來繪制顯示對象。各個子顯示對象可以向父對象請求它們在布局中的大小和位置,但最終決定各個子顯示對象的大小和位置的是父對象。