如何把時鐘和文字放在同一個畫面?
This document is provided as is. You are welcomed to use it for non-commercial purpose.Written by: 國立中興大學資管系呂瑞麟 Eric Jui-Lin Lu
請勿轉貼
現在你已經知道怎麼把文字(也就是 Hello World)或者時鐘(剛剛的練習題)放到螢幕上,可是怎麼把兩個以上的 GUI 元件放到螢幕上呢?說明 setContentView() 的時候,我們說明了該方法只能有一個參數,而且該參數必須是 View 或者其子類別的物件,這項限制也說明了:如果利用這樣的方式使用 setContentView(),只有一個 GUI 元件可以顯示在螢幕上。為了瞭解是否能解決這種限制,除了搜尋之外,另一個方式就是找 API 文件。
如果物件導向的概念清楚的話,找的方式蠻簡單的:就是找 View 的子類別。翻了一下,我們找到了 ViewGroup 類別,一看到 Group 大概可以推測它可以由一群 View 組成。仔細檢查 ViewGroup 卻又發現它是一個抽象類別(abstract class),因此程式無法直接產生一個 ViewGroup 的物件。那麼有沒有 ViewGroup 的子類別,且該類別不是抽象類別呢?所以再翻一下文件,立即看到了一個名為 LinearLayout 的類別。顧名思義,Layout 是排版,所以把兩個以上的 GUI 元件利用某種方式來排列還蠻合理的,因此本文件就利用 LinearLayout 來排版。
本範例的原始碼如下所示,由於程式的其他部分幾乎都跟 Hello World 程式相同,相同的部分我們就不再列示。
01 LinearLayout vg = new LinearLayout(this); 02 AnalogClock av = new AnalogClock(this); 03 TextView tv = new TextView(this); 04 tv.setText("我要出運了"); 05 vg.addView(av); 06 vg.addView(tv); 07 setContentView(vg);
LinearLayout 的排版方式很簡單,它將所有其內含的所有 GUI 元件以一列或者一欄的方式(預設的方式是"列"),然後依據 GUI 元件加入(addView())的先後順序顯示出來。執行上列程式的結果如下 所示:
其實依據本文件的方式使用 setContentView(),並不能讓開發 Android 程式的工作變得簡單而又有彈性(例如變更語系),因此如果要擺放多個 GUI 元件的時候,作者並不建議如此作。我們會在未來的教材中,說明真正 Android 建議的方式。
Written by: 國立中興大學資管系呂瑞麟 Eric Jui-Lin Lu
沒有留言:
張貼留言