(在讀本文之前,會(huì )缺省的認為你已經(jīng)知道如何創(chuàng )建一個(gè)Android項目,并知道如何在模擬器中運行這個(gè)項目。并且,期望你已經(jīng)有一點(diǎn)HTML或者其他GUI的開(kāi)發(fā)經(jīng)驗。)
在我的理解中,對開(kāi)發(fā)者來(lái)說(shuō),寫(xiě)J2SE的程序和J2ME的程序相比,最大的區別不是他們API或者是其他一些規則、限制等的不同,更多的是兩者程序界面(或者說(shuō)UI)方面的區別。
我們寫(xiě)任何一段程序,都是需要有UI的,因為我們的程序最終是給用戶(hù)去用的,即使我們寫(xiě)了一個(gè)工具,沒(méi)有任何顯式IO,我們也還是需要暴露必要的方法來(lái)提供別人使用,在此情景下,這些方法似乎也可以看作是UI。
對J2SE來(lái)說(shuō),一般都不會(huì )需要GUI,因為我們很少去寫(xiě)SWING、SWT程序,即使Sun力推的JavaFX,好像涉及的也不多,而對于J2ME來(lái)說(shuō),最大的困難可以就是那些GUI的實(shí)現,以及如何將程序的功能綁定到那些界面上,從界面中接收用戶(hù)的輸入,或者是用合適、合理的方式向界面輸出,無(wú)論是通過(guò)文本,或是曲線(xiàn)、圖形。
同理,如果你有J2EE的經(jīng)驗,服務(wù)后臺的代碼往往是相對易讀、易懂、系統并且內聚的,這些代碼看起來(lái)是如此的和諧、整潔、干凈。而如果涉及到界面,就會(huì )陡然復雜的多,即使各種各樣的framework試圖要解決View與Model、Control的協(xié)作問(wèn)題,結果卻讓大家更加的迷惑于各種配置之間??偸怯蠫UI的程序都會(huì )看起來(lái)有些凌亂和繁蕪。
似乎有些跑題… 打住…:)??瓤?,同樣,對于A(yíng)ndroid開(kāi)發(fā)來(lái)說(shuō),用戶(hù)界面的實(shí)現應該是比較重要的和復雜的一環(huán)。好消息是,到目前為止,“神仙”們也沒(méi)有發(fā)現其他更好的用戶(hù)界面實(shí)現方式,所以說(shuō)如果有HTML設計經(jīng)驗,或者說(shuō)有Swing,Flash等圖形設計經(jīng)驗,那么理解Android的UI設計,會(huì )容易的多,甚至會(huì )有似曾相識的感覺(jué)。
Android的用戶(hù)界面可以有兩種實(shí)現方式:使用XML或者是使用Java代碼。通過(guò)直接書(shū)寫(xiě)代碼的方式來(lái)實(shí)現界面是比較恐怖的事情。舉個(gè)例子來(lái)說(shuō),如果你有DHTML的經(jīng)驗,那么這兩者的區別可以比喻為:用XML來(lái)實(shí)現用戶(hù)界面就像直接寫(xiě)HTML代碼,而用 Java代碼來(lái)實(shí)現用戶(hù)界面就像用Javascript創(chuàng )建DOM對象來(lái)拼接頁(yè)面。所以,使用XML來(lái)布局界面應該是首選。
Android使用一個(gè)XML文件來(lái)定義用戶(hù)界面。為了方便理解,你可以直接把它理解為一個(gè)HTML文件。事實(shí)上,它也確實(shí)比較像一個(gè)HTML文件。
這個(gè)XML文件的格式為:
<ViewGroupClass xmlns:android="http://schemas.android.com/apk/res/android"id="@+id/string_name" (attributes)><widget or other nested ViewGroupClass>+<requestFocus/>(0 or 1 per layout file, assigned to any element)</ViewGroupClass>
這里面有一個(gè)比較重要的類(lèi)叫ViewGroup,這個(gè)XML的root節點(diǎn)必須是一個(gè)ViewGroup,或者是一個(gè)單一的Widget(整個(gè)XML只有一個(gè)元素)。Android幾乎所有的UI似乎都和ViewGroup有或多或少的關(guān)系。但是它只是一個(gè)abstract class,并不能直接使用,我們能用的,是它的一些子類(lèi),例如:
從上述這幾個(gè)類(lèi)從名字就可看的出來(lái),他們是Layout,也就是布局,如果用過(guò)Swing的話(huà),這些東西和Swing的那套東西一致,如果沒(méi)有用過(guò) Swing,希望你用過(guò)HTML,那么每一個(gè)Layout,可以理解為有了特定排版樣式的DIV。在DIV的內部,可以放置其他的DIV,當然也可以放置最底層的元素,比如說(shuō)文本、文本框、單選按鈕、圖片等等。這里面所說(shuō)的最底層的元素,它們有一個(gè)超類(lèi)叫做View,這個(gè)超類(lèi)非常的超,連 ViewGroup都是它的子類(lèi)。ViewGroup就是能容納其他View的View。常用的View有很多,可以參考這里,后文再介紹。
關(guān)于XML布局,可以總結一下:
用一個(gè)結構圖表示:

ViewGroup
上面提到的幾個(gè)ViewGroup,稍微詳細點(diǎn)介紹一下:
其實(shí),說(shuō)了這么一大堆,還是不如一個(gè)具體的實(shí)例看的痛快:
<?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"><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/hello"/></LinearLayout>
詳細解釋一下:
每一種元素可以定義屬性有很多,并且這些屬性都可以和HTML的css中的屬性來(lái)類(lèi)比,遇到的時(shí)候再敘或者是翻一下相關(guān)文檔。
聯(lián)系客服