Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android界面設計學習日志(一)

Android界面設計學習日志(一)

編輯: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中的屬性來類比,遇到的時候再敘或者是翻一下相關文檔。

  • AbsoluteLayout
  • FrameLayout
  • LinearLayout
  • RelativeLayout
  • TableLayout
  • … 其他還有很多,以後用到的時候再說,一次性把這些東西都弄明白既不客觀也不現實。

從上述這幾個類從名字就可看的出來,他們是Layout,也就是布局,如果用過Swing的話,這些東西和Swing的那套東西一致,如果沒有用過 Swing,希望你用過HTML,那麼每一個Layout,可以理解為有了特定排版樣式的DIV。在DIV的內部,可以放置其他的DIV,當然也可以放置最底層的元素,比如說文本、文本框、單選按鈕、圖片等等。這裡面所說的最底層的元素,它們有一個超類叫做View,這個超類非常的超,連 ViewGroup都是它的子類。ViewGroup就是能容納其他View的View。常用的View有很多,可以參考這裡,後文再介紹。

關於XML布局,可以總結一下:
  1. 這個XML文件是由許多View嵌套組成的
  2. 如果布局中有多個元素,那麼最頂層必須是ViewGroup(一個ViewGroup對象同時也是一個View對象),不可以是View,如果整個布局只有一個元素,那麼最頂層元素就是這個唯一的元素。
  3. 在ViewGroup可以內部嵌套View(既然可以嵌套View,就更以嵌套ViewGroup了)
  4. 在View中,不可嵌套其他東西了,要不然它就是ViewGroup了,就是這麼定義的。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved