編輯:Android開發實例
Android的用戶界面可以有兩種實現方式:使用XML或者是使用Java代碼。通過直接書寫代碼的方式來實現界面是比較恐怖的事情。舉個例子來說,如果你有DHTML的經驗,那麼這兩者的區別可以比喻為:用XML來實現用戶界面就像直接寫HTML代碼,而用 Java代碼來實現用戶界面就像用Javascript創建DOM對象來拼接頁面。所以,使用XML來布局界面應該是首選。
Android使用一個XML文件來定義用戶界面。為了方便理解,你可以直接把它理解為一個HTML文件。事實上,它也確實比較像一個HTML文件。
這個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>
這裡面有一個比較重要的類叫ViewGroup,這個XML的root節點必須是一個ViewGroup,或者是一個單一的Widget(整個XML只有一個元素)。Android幾乎所有的UI似乎都和ViewGroup有或多或少的關系。但是它只是一個abstract class,並不能直接使用,我們能用的,是它的一些子類,例如:
上面提到的幾個ViewGroup,稍微詳細點介紹一下:
AbsoluteLayout,絕對定位的布局方式,在它內部嵌套的元素必須指定具體的位置。
FrameLayout,幀布局方式,說幀不太容易理解,可以說成是層布局方式,也就是說,在它內部的元素,是一層一層的疊加在一起的。如果用過Photoshop,或者 Flash,這裡面的層的概念是和他們一致的。如果最上層的元素是不透明的,並且比下面的元素尺寸要大,那麼將看不到下面的元素,只能看到頂層元素。這些層的順序是:最新聲明的放到最前面。可以這樣理解,Android按文件的書寫順序來組織這個布局,先聲明的放在第一層,再聲明的放到第二層,…,最後聲明的放在最頂層。
LinearLayout,線性布局方式(真不知道這該怎麼翻譯,其實很多技術名詞還是不翻譯的好),這種布局比較常用,也比較簡單,就是每個元素占一行,當然也可能聲明為橫向排放,也就是每個元素占一列。
RelativeLayout,相對定位的布局方式,這個比較好玩,在元素的位置的時候,使用相對位置,可以相對其他元素,也可以相對這個布局,就像我說:我現在站在pawa和 tempest的中間;或者說,我站在隊伍的中間。前者就是相對其他元素來定義位置,後者是相對整個布局來定義位置。(注:pawa和tempest是 Android歷史上很著名的兩位人物,具體請參閱 Roiding.com)。
TableLayout,表格的布局方式,我真的不忍心翻譯Table這個詞,翻譯成表格,似乎少了一些神韻,這裡面的Table和HTML中的Table非常像,就連寫法都非常像。
其實,說了這麼一大堆,還是不如一個具體的實例看的痛快:
<?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="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
</LinearLayout>詳細解釋一下:
首先,定義了一個LinearLayout,前面中說過,這個布局要麼將子元素水平排列,要麼將它們豎直排列。
android:orientation=”vertical”
聲明此布局中的子元素要豎直排列,這樣如果在這個布局中有兩個子元素的話,那麼這兩個將分別各占一行,如果將這個值設置為”horizontal”,就變成了水平排列,那麼兩個子元素將分別各占一列,但是在這個示例中,只聲明了一個子元素,你可以再為它添加一個子元素來觀察效果。
android:layout_width=”fill_parent”
聲明此布局的寬度為:填滿parent,這裡面的parent也不好翻譯,意思就是,如果它是嵌套在其他ViewGroup之中,那麼那個ViewGroup的寬度就是它的寬度,如果它是頂層的元素,那麼就填滿屏幕。
android:layout_height=”fill_parent”
聲明此布局的高度為:填滿parent。
然後,定義了一個TextView,一個TextView,就是一塊區域,用來顯示文本,用這個View定義的元素只能用來顯示,是不可以編輯的,如果想要可編輯的文本塊,那麼應該使用它的子類EditText,這個等後面遇到再說。
android:layout_width=”fill_parent”
同上。
android:layout_height=”wrap_content”
wrap_content的意思是:夠用即可,那如果說填滿整個parent都不夠用呢?那就只能顯示那麼多了,空間不夠的只能被隱藏掉了,所以必要的時候得使用ScrollView,後面再說。
android:text=”@string/hello”
用來定義這個文本框中顯示的內容,你可以直接將字符串寫在這裡:android:text=”hello, Roind.com”,也可以像本例中的那樣,將所有的字符串放到一個資源文件中,然後在這裡直接引用那個資源文件中的定義。在這裡就是使用資源文件中的 hello變量,在Android的缺省設置中,這個資源文件是:res/values/strings.xml。在這裡你可能會問為什麼聲明一下”@string/hello”就知道使用這個文件中定義的字符串呢,這個也留在後面詳述,關於res目錄下的東西還有很多,可以參考一下這裡或者這裡。
每一種元素可以定義屬性有很多,並且這些屬性都可以和HTML的css中的屬性來類比,遇到的時候再敘或者是翻一下相關文檔。
從上述這幾個類從名字就可看的出來,他們是Layout,也就是布局,如果用過Swing的話,這些東西和Swing的那套東西一致,如果沒有用過 Swing,希望你用過HTML,那麼每一個Layout,可以理解為有了特定排版樣式的DIV。在DIV的內部,可以放置其他的DIV,當然也可以放置最底層的元素,比如說文本、文本框、單選按鈕、圖片等等。這裡面所說的最底層的元素,它們有一個超類叫做View,這個超類非常的超,連 ViewGroup都是它的子類。ViewGroup就是能容納其他View的View。常用的View有很多,可以參考這裡,後文再介紹。
關於XML布局,可以總結一下:
有時候,不希望圖片突然出現在屏幕上,而要應用某種形式的動畫顯示圖片時,從一個圖像轉換到另一個。這是在Android中支持的ImageSwitcher圖像切換器允許通過它們
Android提供了許多方法來控制播放的音頻/視頻文件和流。其中該方法是通過一類稱為MediaPlayer。Android是提供MediaPlayer類訪問內置的媒體播放
Android應用程序可以在許多不同地區的許多設備上運行。為了使應用程序更具交互性,應用程序應該處理以適合應用程序將要使用的語言環境方面的文字,數字,文件等。在本章中,我
工作中有做過手機App項目,前端和android或ios程序員配合完成整個項目的開發,開發過程中與ios程序配合基本沒什麼問題,而android各種機子和rom的