Activity 是 Android 應(yīng)用用戶界面的基本組成部件。但 Activity 本身并不提供用戶界面(User Interface)。從程序結(jié)構(gòu)層次上來說,一個 Android 應(yīng)用是類 android.app.Application 的一個實例, Application 中可以包含多個 android.app.Activity 實例。每個 Activity 帶一個Window 類,這個類在 Android 平臺上沒有提供太多功能,主要可以用來控制標(biāo)題欄(屏幕頂端)。比如設(shè)置UI全屏顯示可以使用如下代碼:
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
Activty 缺省是不含用戶界面,如需顯示用戶界面,則可以調(diào)用 setContentView()來設(shè)置 Activity 的 ContentView。 ConentView 描述了具體的 UI 組件,如文本框,標(biāo)簽,列表框,圖片框的。
http://wiki.jikexueyuan.com/project/android-development-tutorial/images/11.png" alt="" />
Android 的用戶界面其實就是指 ContentView 的設(shè)計?!癡iew”開始會使人產(chǎn)生誤解,在其它平臺“View”一般指類似Form的概念。而在 Android 平臺上 View 是 UI 組件,相當(dāng)于其他平臺的Component,ViewGroup 相當(dāng)于其它平臺的 Container,如下圖所示:
http://wiki.jikexueyuan.com/project/android-development-tutorial/images/12.png" alt="" />
有了這個對應(yīng)關(guān)系就很容易將你已有的用戶界面設(shè)計知識用在 Android 的用戶界面設(shè)計上來。
此外 Android 用戶界面設(shè)計一個推薦的方法是使用 XML 來描述 UI,這也不是 Android 平臺的首創(chuàng),Java ME Polish,WPF,Silverlight 等都采用 XML 來描述 UI,使用 XML 來描述的好處是將用戶界面和程序邏輯分開,可以做到用戶界面的改變不影響程序邏輯,程序邏輯的變動也可以不影響用戶界面,實際上是采用了 MVC 模式的設(shè)計。Activity 是 MVC 中的 Controller,Activity 的ContentView 則是 MVC 中的 View。如果你不想使用 XML 來描述 UI,也可以使用代碼來創(chuàng)建 UI,不過這種方法既麻煩,也增加了模塊之間的耦合度。
理解了 Android 的 View 和 ViewGroup 之后,具體設(shè)計用戶界面并不復(fù)雜,一般來說 ViewGroup定義它的子 View 的布局 Layout,也就是其它 View (文本框,標(biāo)簽等控件或是其它 ViewGroup)在用戶界面的位置安排。如上圖所示,這個層次關(guān)系可以嵌套。通過嵌套,你可以定義出任意用戶界面。
http://wiki.jikexueyuan.com/project/android-development-tutorial/images/13.png" alt="" />
Android 中的基本布局如下:
FrameLayout
最簡單的布局對象
在屏幕上故意保留的空白空間,你可以之后填充一個單獨的對象
例如:一個你要更換的圖片
所有子元素都釘?shù)狡聊坏淖笊辖?br />
不能為子元素指定位置
LinearLayout
在一個方向上(垂直或水平)對齊所有子元素
所有子元素一個跟一個地堆放
一個垂直列表每行將只有一個子元素(無論它們有多寬)
一個水平列表只是一列的高度(最高子元素的高度來填充)
TableLayout
把子元素放入到行與列中
不顯示行、列或是單元格邊界線
單元格不能橫跨行,如 HTML 中一樣
AbsoluteLayout
使子元素能夠指明確切的X / Y 坐標(biāo)顯示在屏幕上
(0,0)是左上角
當(dāng)你下移或右移時,坐標(biāo)值增加
允許元素重疊(但是不推薦)
注意:
一般建議不使用 AbsoluteLayout 除非你有很好的理由來使用它
因為它相當(dāng)嚴(yán)格并且在不同的設(shè)備顯示中不能很好地工作
http://wiki.jikexueyuan.com/project/android-development-tutorial/images/14.png" alt="" />
RelativeLayout 讓子元素指定它們相對于其他元素的位置(通過 ID 來指定)或相對于父布局對象
http://wiki.jikexueyuan.com/project/android-development-tutorial/images/15.png" alt="" />
如果不喜歡 Eclipse IDE 自帶的 UI 設(shè)計工具,可以使用免費 Android UI 設(shè)計軟件 DroidDraw,下載 DroidDraw。
Android SDK 的 ApiDemo 中也介紹 Android 提供的各個 UI 組件(Menu,Dialog,TextView,Button,List 等以及各個 Layout)的用法。這里就不一一介紹了。