歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android-屏幕元素層次結構

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()方法來繪制顯示對象。各個子顯示對象可以向父對象請求它們在布局中的大小和位置,但最終決定各個子顯示對象的大小和位置的是父對象。

Ubuntu 14.04 x64配置Android 4.4 kitkat編譯環境的方法 http://www.linuxidc.com/Linux/2014-05/101148.htm

Ubuntu 12.04搭建Android開發環境 http://www.linuxidc.com/Linux/2012-09/69961.htm

Ubuntu 14.04 配置 Android SDK 開發環境 http://www.linuxidc.com/Linux/2014-05/101039.htm

64位Ubuntu 11.10下Android開發環境的搭建(JDK+Eclipse+ADT+Android SDK詳細) http://www.linuxidc.com/Linux/2013-06/85303.htm

Ubuntu 12.10 x64 安裝 Android SDK http://www.linuxidc.com/Linux/2013-03/82005.htm

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved