Android用戶界面詳解
這個章節(jié)描述怎么實現(xiàn)一個基本的Android界面。它涉及構(gòu)建屏幕基本元素,怎么在xml(定義文件)內(nèi)定義屏幕、用你的代碼生成、在不同任務(wù)你需要操作你的用戶接口。Android生成屏幕有三種方式:xml配置生成;通過你自己用戶界面接口生成;直接用代碼生成。根據(jù)MVC原則,UI應(yīng)該與程序邏輯相分離,因此,在XML中定義UI結(jié)構(gòu)是高度推薦的。此外,一個程序從一個屏幕方案調(diào)整到另一個也容易得多。在XML中定義UI跟創(chuàng)建一個普通的HTML文檔非常相似,例如,你有如下的一個文件:
本文引用地址:http://butianyuan.cn/article/201610/305851.htmThe content of the body element.
就如Android的XML布局一樣,所有的元素都是結(jié)構(gòu)化的,能夠通過樹形結(jié)構(gòu)來表示:
xmlns:android=http://schemas.android.com/apk/res/android
android:orientation=vertical
android:layout_width=fill_parent
android:layout_height=fill_parent>
android:layout_width=wrap_content
android:layout_height=wrap_content
android:text=Hello World/>
3.2.1屏幕元素的層次
Android應(yīng)用程序的基礎(chǔ)功能單元就是Activity--android.app.Activity類中的一個對象。一個Activity可以做很多事,但是他自己并不會顯示到屏幕上。想要讓你的Activity顯示在屏幕上并且設(shè)計它的UI,你需要使用view和viewgroup--Android平臺基礎(chǔ)的用戶界面表達(dá)單元。
Views
一個view是一個android.view.View基礎(chǔ)類的對象。它是一個存儲有屏幕上特定的一個矩形內(nèi)布局和內(nèi)容屬性的數(shù)據(jù)結(jié)構(gòu)。一個View對象處理測距和布局,繪圖,焦點變換,滾動條,還有屏幕區(qū)域自己表現(xiàn)的按鍵和手勢。
View類作為一個基類,為widget(窗體部件)服務(wù),widget--是一組用于繪制交互屏幕元素的完全實現(xiàn)子類。Widget處理它們自己的測距和繪圖,所以你可以更快速地用它們?nèi)?gòu)建你的UI。可用到的widget包括Text,EditText,InputMethod,Button,RadioButton,Checkbox,和ScrollView……。
Viewgroups
一個ViewGroup是一個android.view.Viewgroup類的對象。正如同它的名字表明的一樣,一個viewgroup是一個特殊的view對象,它的功能是去裝載和管理一組下層的view和其他viewgroup,Viewgroup讓你可以為你的UI增加結(jié)構(gòu)并且將復(fù)雜的屏幕元素構(gòu)建成一個獨立的實體。
Viewgroup類作為一個基類為layout(布局)服務(wù),layout--是一組提供屏幕界面通用類型的完全實現(xiàn)子類。layout讓你可以為一組view構(gòu)建一個結(jié)構(gòu)。
一個樹形結(jié)構(gòu)的界面
在Android平臺上,你用view樹和viewgroup節(jié)點來定義一個Activity的UI,就如同下面圖表一樣。這個樹可以如你需要那樣簡單或者復(fù)雜,并且你可以使用Android的預(yù)定義widget和layout或者你自定義的view類型來構(gòu)建它。
一個view和viewgroup樹的樣例:
Picture 4 Android UI - Tree structure
要將屏幕綁定一個樹以便于渲染,你的Activity調(diào)用它的setContentView()方法并且傳遞一個參數(shù)給根節(jié)點對象。一旦Android系統(tǒng)獲得了根節(jié)點的參數(shù),它就可以直接通過節(jié)點來無效化,測距和繪制樹。當(dāng)你的Activity被激活并且獲得焦點時,系統(tǒng)會通知你的activity并且請求根節(jié)點去測距并繪制樹,根節(jié)點就會請求它的子節(jié)點去繪制它們自己,同時,每個樹上的viewgroup節(jié)點負(fù)責(zé)繪制它的直接子節(jié)點。
正如之前提到的,每個view group都有測量它的有效空間,布局它的子對象,并且調(diào)用每個子對象的Draw()方法去繪制它們自己。子對象可能會請求獲得一個它們在父對象中的大小和位置,但是父對象對于每個子對象的大小和位置有最終的決定權(quán)。
LayoutParams:一個子對象如何指定它的位置和大小
每個viewgroup類都會使用一個繼承于Viewgroup.LayoutParams的嵌套類。這個子類包含了一系列的屬性類型,這些屬性類型定義一個子對象位置和大小,與view group類相適應(yīng)。
layoutparams的一個樣例:
要注意的是,每個LayoutParams子類都有它自己賦值的語法。每個子元素必須定義適用于它們父對象的LayoutParams,盡管父對象可能會為子元素定義不同的LayoutParams。
所有的viewgroup都包括寬和高。很多還包括邊界的定義(margin和border)。你可以非常精確地描述寬和高,盡管你并不想經(jīng)常這么做。更多時候你希望你的view自行調(diào)整到適應(yīng)內(nèi)容大小,或者適應(yīng)容器大小。
Android 界面元素與Swing界面元素的比較
Android 界面元素 |
評論