Android連載之:第三章第二節:Android用戶界面

 

3.2 Android用戶界面

這個章節描述怎麼實現一個基本的Android界面。它涉及構建屏幕基本元素,怎麼在xml(定義文件)內定義屏幕、用你的代碼生成、在不同任務你需要操作你的用戶接口。Android生成屏幕有三種方式:xml配置生成;通過你自己用戶界面接口生成直接用代碼生成。根據MVC原則,UI應該與程序邏輯相分離,因此,在XML中定義UI結構是高度推薦的。此外,一個程序從一個屏幕方案調整到另一個也容易得多。在XML中定義UI跟創建一個普通的HTML文檔非常相似,例如,你有如下的一個文件:

<html>

<head>

<title>Page Title</title> 

</head> 

<body>

The content of the body element.

</body>

</html>

就如Android的XML佈局一樣,所有的元素都是結構化的,能夠通過樹形結構來表示:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout

 xmlns:android=http://schemas.android.com/apk/res/android

 android:orientation="vertical" 

android:layout_width="fill_parent"

android:layout_height="fill_parent"> 

<TextView 

android:layout_width="wrap_content" 

android:layout_height="wrap_content"

android:text="Hello World"/> 

</LinearLayout>

3.2.1屏幕元素的層次  

   Android應用程序的基礎功能單元就是Activity--android.app.Activity類中的一個對象。一個Activity可以做很多事,但是他自己並不會顯示到屏幕上。想要讓你的Activity顯示在屏幕上並且設計它的UI,你需要使用view和viewgroup--Android平臺基礎的用戶界面表達單元。

Views 

一個view是一個android.view.View基礎類的對象。它是一個存儲有屏幕上特定的一個矩形內佈局和內容屬性的數據結構。一個View對象處理測距和佈局,繪圖,焦點變換,滾動條,還有屏幕區域自己表現的按鍵和手勢。

View類作爲一個基類爲widget(窗體部件)服務,widget--是一組用於繪製交互屏幕元素的完全實現子類。Widget處理它們自己的測距和繪圖,所以你可以更快速地用它們去構建你的UI。可用到的widget包括Text,EditText,InputMethod,Button,RadioButton,Checkbox,和ScrollView……。 

Viewgroups 

一個ViewGroup是一個android.view.Viewgroup類的對象。正如同它的名字表明的一樣,一個viewgroup是一個特殊的view對象,它的功能是去裝載和管理一組下層的view和其他viewgroup,Viewgroup讓你可以爲你的UI增加結構並且將複雜的屏幕元素構建成一個獨立的實體。 

Viewgroup類作爲一個基類爲layout(佈局)服務,layout--是一組提供屏幕界面通用類型的完全實現子類。layout讓你可以爲一組view構建一個結構。

一個樹形結構的界面 

在Android平臺上,你用view樹和viewgroup節點來定義一個Activity的UI,就如同下面圖表一樣。這個樹可以如你需要那樣簡單或者複雜,並且你可以使用Android的預定義widget和layout或者你自定義的view類型來構建它。 

一個view和viewgroup樹的樣例: 

 

Picture 4 Android UI - Tree structure 

要將屏幕綁定一個樹以便於渲染,你的Activity調用它的setContentView()方法並且傳遞一個參數給根節點對象。一旦Android系統獲得了根節點的參數,它就可以直接通過節點來無效化,測距和繪製樹。當你的Activity被激活並且獲得焦點時,系統會通知你的activity並且請求根節點去測距並繪製樹,根節點就會請求它的子節點去繪製它們自己,同時,每個樹上的viewgroup節點負責繪製它的直接子節點。

正如之前提到的,每個view group都有測量它的有效空間,佈局它的子對象,並且調用每個子對象的Draw()方法去繪製它們自己。子對象可能會請求獲得一個它們在父對象中的大小和位置,但是父對象對於每個子對象的大小和位置有最終的決定權。

LayoutParams:一個子對象如何指定它的位置和大小 

每個viewgroup類都會使用一個繼承於Viewgroup.LayoutParams的嵌套類。這個子類包含了一系列的屬性類型,這些屬性類型定義一個子對象位置和大小,view group類相適應。 

layoutparams的一個樣例

要注意的是,每個LayoutParams子類都有它自己賦值的語法。每個子元素必須定義適用於它們父對象的LayoutParams,儘管父對象可能會爲子元素定義不同的LayoutParams。 

所有的viewgroup都包括寬和高。很多還包括邊界的定義(margin和border)。你可以非常精確地描述寬和高,儘管你並不想經常這麼做。更多時候你希望你的view自行調整到適應內容大小,或者適應容器大小。

 Android 界面元素與Swing界面元素的比較 

   Android 界面元素

Swing 界面元素

Activities

Frame

Views

Components

TextViews

Labels

EditTexts

TextFields

Buttons

Buttons

Android和Swing的監聽者設置也幾乎一樣:

3.2.2 通用佈局對象

下面爲在你的應用中爲最普遍的view groups。這裏介紹每種類型的一些基本信息;更深入的細節,請看每章前面的鏈接參考頁。 

FrameLayout

FrameLayout是最簡單的一個佈局對象。它被定製爲你屏幕上的一個空白備用區域,之後你可以在其中填充一個單一對象 — 比如,一張你要發佈的圖片。所有的子元素將會固定在屏幕的左上角;你不能爲FrameLayout中的一個子元素指定一個位置。後一個子元素將會直接在前一個子元素之上進行覆蓋填充,把它們部份或全部擋住(除非後一個子元素是透明的)。

LinearLayout

LinearLayout以你爲它設置的垂直或水平的屬性值,來排列所有的子元素。所有的子元素都被堆放在其它元素之後,因此一個垂直列表的每一行只會有一個元素,而不管他們有多寬,而一個水平列表將會只有一個行高(高度爲最高子元素的高度加上邊框高度)。LinearLayout保持子元素之間的間隔以及互相對齊(相對一個元素的右對齊、中間對齊或者左對齊)。 

LinearLayout還支持爲單獨的子元素指定weight。好處就是允許子元素可以填充屏幕上的剩餘空間。這也避免了在一個大屏幕中,一串小對象擠成一堆的情況,而是允許他們放大填充空白。子元素指定一個weight值,剩餘的空間就會按這些子元素指定的weight比例分配給這些子元素。默認的weight值爲0。例如,如果有三個文本框,其中兩個指定了weight值爲1,那麼,這兩個文本框將等比例地放大,並填滿剩餘的空間,而第三個文本框不會放大。

下面的兩個窗體採用LinearLayout,包含一組的元素:一個按鈕,幾個標籤,幾個文本框。兩個窗體都爲佈局做了一番修飾。文本框的width被設置爲FILL_PARENT;其它元素的width被設置爲WRAP_CONTENT。默認的對齊方式爲左對齊。左邊的窗體沒有設置weight(默認爲0);右邊的窗體的comments文本框weight被設置爲1。如果Name文本框也被設置爲1,那麼Name和Comments這兩個文本框將會有同樣的高度。 

在一個水平排列的LinearLayout中,各項按他們的文本基線進行排列(第一列第一行的元素,即最上或最左,被設定爲參考基線)。因此,人們在一個窗體中檢索元素時,就不需要七上八下地讀元素的文本了。我們可以在layout的XML中設置android:baselineAligned="false",來關閉這個設置。 

TableLayout

TableLayout將子元素的位置分配到行或列中。android的一個TableLayout由許多的TableRow組成,每個TableRow都會定義一個row(事實上,你可以定義其它的子對象,這在下面會解釋到)。TableLayout容器不會顯示row、cloumns或cell的邊框線。每個row擁有0個或多個的cell;每個cell擁有一個View對象。表格由列和行組成許多的單元格。表格允許單元格爲空。單元格不能跨列,這與HTML中的不一樣。下圖顯示了一個TableLayout,圖中的虛線代表不可視的單元格邊框。 

http://www.top-e.org/jiaoshi/html/?296.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章