Hello, Android!

建立使用者介面

以下的這隻程式可以簡單的在 Android 系統上秀出你想要的字樣:
import android.widget.TextView;
public class HelloAndroid extends Activity {
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    TextView tv = new TextView(this);
    tv.setText("Hello, Android");
    setContentView(tv);
  }
}

看到這段把文字秀在螢幕上的code可以明顯感受到跟Java處理 GUI 的方式是很像的:使用者介面是由多個不同類別的實體依照某種階層組合起來。

XxxxView 之類的類別是某種可繪物件(drawable object);例如各式按鈕、一小段動畫、或像這邊的一段文字。

在此例中,由於螢幕上只放了一個 TextView,因此它便是這個畫面中層級最高的物件,當我們在建立一個層級最高的Android 介面元件時,必須給它一個 Android Context 的實體作為參數。Context 是幫助我們存取手機各項資源的工具,諸如螢幕解析度、資料庫存取等,因為 Activity 類別本身就是Context 的子類別,所以在此我們可以直接把this 給丟入 TextView的建構子中。

我們在建立了 TextView 實體後,便可以.setText() 方法設定要顯示的文字。最後,我們必須呼叫 Activity.setContextView() 方法來告訴這個Activity要顯示哪個UI元件;如果沒有呼叫它,那麼無論我們之前做了多少事,Activity也不知道該把哪個東西放上來,也就什麼也看不到了。

改以 XML 建立使用者介面

我們除了可以使用以上「程式化」的方法建立使用者介面外,Android 還提供了我們另一個更為系統化、更清楚易懂的介面建立方式:XML-based layout files。以下是一個與上面程式功能完全相同的 XML layout file:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="Hello, Android"/>

Android 的 XML layout file 結構是非常簡單的:每一個tag name都是一種 View 的類別名稱(這個 View 甚至可以是自訂的 UI 類別),我們可以用設定這個tag的屬性來調整該 UI 元件的樣子.這個例子建構出的介面會與上面的程式碼一樣,只有一個 View(tag),其中的四個屬性意義分別如下:

  • xmlns:android:每個在layout file中最外層的tag都應該要有這個屬性。

  • android:layout_width:指定此元件在螢幕上可以擺設的寬度為何.此例中設為"file_parent",即可以擺滿全部的寬。

  • android:layout_height:指定此元件在螢幕上可以擺設的高度為何。

  • android:text:指定此元件顯示的文字為何。


那我們建立好的 layout file 該如何使用呢?一般來說,我們會把建立好的layout file要放置於專案目錄中的 res/layout/ 目錄下.在此例中,我們先在 res/layout/ 目錄下建立一個 main.xml 檔案,並將上面的XML內容貼入其中並儲存.最後,再把本文一開始的程式碼改為:

public class HelloAndroid extends Activity {
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.main);
  }
}

全部修改完成之後,執行看看吧!你會發現這會與你一開始所寫程式碼功能完全一模一樣!事實上,這是Android效法一般網路應用程式開發精神的結果:藉由把使用者介面與內部邏輯的完整切割,可以使介面設計與內部邏輯的開發更加快速與便利,就像目前網路應用程式開發的趨勢一般。

最後,我們來看看XML layout file (.xml)是怎麼與程式碼 (.java)作出連結的吧!

我們在把程式碼的source file及介面的layout file分別放置到合適的目錄下後,即開始編譯並執行;此時Android會根據你放置在res/ 目錄下layout file 的內容自動產生一個「R」類別(src/R.java 檔案),它會以我們傳統上存取應用程式資源時的字典方式幫我們存取layout file中的設定值;也就是在此 R 類別中定義許多個常數性質的成員,讓我們主要處理邏輯的程式碼可以方便使用。

留言

這個網誌中的熱門文章

[Android] 設計以格狀為主的排版時,使用 GridView 或是 TableLayout 較好呢?

[Java] 何時該使用LinkedList? (與ArrayList的效率比較)

[Java] HashTable和HashMap的不同