流程控制結構 4-1 流程控制與 UML 活動圖 4-2 程式區塊與主控台基本輸入 4-3 條件控制敘述 4-4 迴圈控制敘述 4-5 巢狀迴圈
PART 1 Java 結構化程式設計 4-1 流程控制與 UML 活動圖 程式語言撰寫的程式碼大部分是一列指令接著一列指令循序的執行, 但是對於複雜的工作, 為了達成預期的執行結果, 我們需要在程式中使用 流程控制結構 (Control Structures) 4-1-1 UML 活動圖 UML (Unified Modelling Language) 是一種符號語言, 它是用來描述 物件導向分析 (OOA) 和 物件導向設計 (OOD) 的分析結果, 如同工程式師閱讀藍圖就可以蓋房子, 程式設計師看到 UML 繪出的模型圖, 就可以寫出所需的程式碼 活動圖 (Activity Diagram) 是 UML 眾多符號圖形之一, 其主要目的是描述使用案例 (Use Case) 的事件流程和物件操作, 即工作流程和所需的作業和活動 在本章筆者使用活動圖取代傳統流程圖 (Flowchart), 用來描述 Java 流程控制的執行流程 活動圖主要符號圖形的說明, 如下表所示 : 符號 說明 程式敘述 圓角長方形表示活動, 也就是執行的操作 實心圓形代表活動流程的開始 同心圓形代表活動流程的結束 菱形代表分歧的選擇結構, 例如 :if/else 或 switch 等條件敘述 程式敘述 1 程式敘述 2 箭頭線可以連接活動來標示執行的順序 4-2
流程控制結構 chapter 4 4-1-2 流程控制的種類 流程控制依據程式碼執行的順序可以分為三種 : 循序結構 選擇結構和重複結構 循序結構 循序結構 (Sequential) 是程式預設的執行方式, 也就是 一個程式敘述接著一個程式敘述來依序的執行, 如右圖所示 : 程式敘述 程式敘述 程式敘述 選擇結構選擇結構 (Selection) 就是條件控制敘述, 它是一個選擇題, 分為單一選擇 二選一或多選一三種 程式執行順序是依照關係運算式的條件, 來決定執行哪一個程式區塊的程式碼, 如下圖所示 : 程式敘述 程式敘述 程式敘述 4-3
PART 1 Java 結構化程式設計 上述在活動之間的連接線上方有方括號, 其中的內容是條件,UML 稱為防衛條件 (Guard Condition) 條件控制敘述如同從公司走路回家, 因為回家的路不只一條, 當走到十字路口時, 可以決定向左 向右或直走, 雖然最終都可以到家, 但是經過的路徑並不相同, 也稱為 決策條件敘述 (Decision Making Statements) 重複結構重複結構 (Iteration) 是迴圈控制, 可以重複執行一個程式區塊的程式碼, 並且提供一個結束條件來結束迴圈的執行 重複結構依據結束條件測試的位置可以分為兩種, 如下所示 : 前測式重複結構 : 測試迴圈結束條件是在程式區塊的開頭, 需要符合條件, 才能執行迴圈中程式區塊的程式碼, 如下圖所示 : 程式敘述 程式敘述 後測式重複結構 : 測試迴圈結束條件是在程式區塊的結尾, 所以迴圈的程式區塊至少會執行一次, 如下圖所示 : 4-4
流程控制結構 chapter 4 程式敘述 程式敘述 迴圈控制敘述如同馬路上的圓環, 車子可以一直繞著圓環開, 駕駛可以隨興繞 幾圈或決定是否離開圓環, 進入圓環是進入迴圈 ; 離開圓環就是離開迴圈 4-2 程式區塊與主控台基本輸入 Java 程式區塊是一種最簡單的結構敘述, 一般來說, 流程控制敘述都是使用程式區塊來控制流程的執行 如果 Java 程式需要輸入值, 我們可以使用 System.in 物件從控制台取得使用者輸入的資料 4-2-1 程式區塊 程式區塊 (Blocks) 的目的是將零到多列的程式敘述組合成一個群組, 以便將 整個程式區塊視為一列程式敘述來處理, 如下所示 : { } 程式敘述 ; 4-5
PART 1 Java 結構化程式設計 上述程式區塊是使用 { 和 } 大括號包圍的一至多個程式敘述, 事實上, 在大括號內也可以不包含任何程式敘述, 稱為 空程式區塊 (Empty Block) 程式區塊可以群組化程式編排, 因為 Java 語言沒有限制宣告變數的位置, 所以 程式區塊還可以用來隱藏變數宣告, 如下所示 : { } int temp; temp = a; a = b; b = temp; 上述程式區塊宣告整數變數 temp, 變數 temp 只能在程式區塊內使用, 一旦離開 程式區塊, 就無法存取變數 temp, 變數 temp 稱為程式區塊的區域變數 (Local to the Block) 關於方法的區域變數說明請參閱 < 第 5-3-2 節 :Java 的變數範圍 > Java 專案 :Ch4_2_1 在 Java 程式 Ch4_2_1.java 使用程式區塊隱藏變數宣告來交換 2 個變數值, 其執 行結果可以看到 2 個變數值已經交換, 如下所示 : 交換變數 :6 : 12 交換後 :12 : 6 程式內容 01: public class Ch4_2_1 { 02: // 主程式 03: public static void main(string[] args) { 04: int a = 6, b = 12; // 變數宣告 05: System.out.println(" 交換變數 :" + a + " : " + b); 06: { // 交換變數 a 和 b 07: int temp; // 宣告區塊變數 08: temp = a; a = b; b = temp; 09: } 10: System.out.println(" 交換後 :" + a + " : " + b); 11: // System.out.println(temp); 12: } 13: } 4-6
流程控制結構 chapter 4 程式說明第 4 列 : 宣告 2 個整數變數且設定初始值 第 6~9 列 : 在程式區塊內宣告變數 temp, 然後交換前面宣告的 2 個變數值 如果取消第 11 列程式碼的註解, 即新增下列程式碼, 如下所示 : System.out.println(temp); 因為變數 temp 是在程式區塊內宣告, 所以區塊之外並無法存取此變數, 在 Eclipse IDE 編輯視窗的 temp 變數之下顯示紅色鋸齒線, 表示有錯誤, 當游標移至其上, 可以看到浮動視窗的訊息指出找不到變數 temp(temp canot be resolved to a variable), 如下圖所示 : 4-2-2 主控台的基本輸入 Java 主控台基本輸入是從 System.in 物件讀取資料, 為了方便說明, 筆者直接使用 java.util.scanner 類別 ( 此為類別全名, 如此就不需匯入套件的類別 ) 的 Scanner 物件來取得輸入資料, 如下所示 : java.util.scanner sc = new java.util.scanner(system.in); 上述程式碼使用 new 運算子建立 Scanner 物件, 其建構子參數是基本輸入的 System.in 物件, 關於 new 運算子 建構子和套件的說明, 請參閱本書第 7 和 9 章 4-7
PART 1 Java 結構化程式設計 在建立 Scanner 物件後, 就可以使用相關方法取得使用者輸入的資料, 如下所示 : String name = sc.nextline(); int grade = sc.nextint(); double height = sc.nextdouble(); 上述程式碼的 nextline() 方法可以取得使用者輸入字串的 String 物件 ( 可以包含 空白字元 ), 詳細字串物件的說明請參閱 < 第 6 章 : 陣列與字串 >;nextint() 方法可 以取得輸入的整數值 ;nextdouble() 方法是取得浮點數值 Java 專案 :Ch4_2_2 在 Java 程式 Ch4_2_2.java 使用 java.util.scanner 類別的物件從 System.in 主控 台取得使用者輸入的字串 整數和浮點數後, 顯示使用者輸入的資料, 其執行結果如下所示 : 請輸入姓名 => Joe Chen 請輸入成績 => 80 請輸入身高 => 175.5 姓名 :Joe Chen 成績 :80 身高 :175.5 上述執行結果可以看到 System.out.print() 方法顯示的提示文字, 在依序輸入字串 整數和浮點數資料後, 顯示使用者輸入的資料,Eclipse IDE 是在下方的 Console 標籤輸入, 如下圖所示 : 在上述 Console 標籤輸入中文字, 有時可能會有些問題, 建議輸入英文內容, 其中淡綠色文字就是我們輸入的內容 4-8
流程控制結構 chapter 4 程式內容 01: public class Ch4_2_2 { 02: // 主程式 03: public static void main(string[] args) { 04: // 建立 Scanner 物件 05: java.util.scanner sc = 06: new java.util.scanner(system.in); 07: System.out.print(" 請輸入姓名 => "); 08: String name = sc.nextline(); // 取得字串 09: System.out.print(" 請輸入成績 => "); 10: int grade = sc.nextint(); // 取得整數 11: System.out.print(" 請輸入身高 => "); 12: double height = sc.nextdouble(); // 取得浮點數 13: System.out.println(" 姓名 :" + name); 14: System.out.println(" 成績 :" + grade); 15: System.out.println(" 身高 :" + height); 16: } 17: } 程式說明 第 5~6 列 : 使用 new 運算子建立 Scanner 物件, 參數是 System.in 物件 第 7 9 和 11 列 : 使用 System.out.print() 方法顯示提示訊息文字 第 8 10 和 12 列 : 依序取得使用者輸入的字串 整數和浮點數, 在第 8 列宣告字串物件, 在此是用來儲存使用者輸入的字串內容 4-3 條件控制敘述 條件控制敘述是使用第 3 章關係和條件運算式, 配合程式區塊建立的決策敘述, 可以分為選擇 (if) 二選一(if/else) 或多選一 (switch) 幾種方式, 此外還提供條件敘述運算子 (?:) 可以建立單行程式碼的條件控制 4-3-1 if 是否選條件敘述 Java 語言的 if 條件敘述是一種是否執行的單選題, 可以決定是否執行程式區塊的程式碼 如果關係 / 條件運算結果為 true, 就執行括號之間的程式區塊 例如 : 以身高判斷是否需要購買全票的條件敘述, 如下所示 : 4-9
PART 1 Java 結構化程式設計 if ( height >= 150 ) { System.out.print(" 身高 : " + height); System.out.println(" 購買全票!"); } 上述 if 條件的關係 / 條件運算式如為 true, 就執行程式區塊的程式碼 ; 若為 false 就不執行程式區塊, 其活動圖如下圖所示 : 執行程式區塊 在上述活動圖的菱形分歧的連接上有防衛條件, 如果 height < 150 就結束 ;height >= 150 才執行之後的程式區塊 如果程式區塊的程式敘述只有一列, 我們可以省略 區塊的大括號, 如下所示 : if ( height < 150 ) System.out.println(" 身高 : "+height+" 購買半票!"); Java 專案 :Ch4_3_1 在 Java 程式 Ch4_3_1.java 依輸入身高的變數值來決定購買全票或半票, 其執行 結果如下所示 : 請輸入身高 (1)=> 180 身高 : 180 購買全票! 請輸入身高 (2)=> 120 身高 : 120 購買半票! 上述執行結果因為先輸入 180, 所以顯示需要購買全票 ; 之後輸入 120, 所以顯 示購買半票 4-10
版面配置與使用介面元件 12-1 建立第一個 Android 應用程式 12-2 Android 專案架構 12-3 版面配置 12-4 介面元件的基礎 12-5 使用介面元件
版面配置與使用介面元件 chapter 12 12-2 Android 專案架構 在 Eclipse IDE 建立的 Android 專案,ADT 工具預設建立多個目錄 子目錄和檔案, 以 Ch12_1_1 專案為例, 如右圖所示 : 上述 Android 專案架構的目錄與檔案說明, 如下所示 : \src 目錄此目錄的內容是 Java 類別的原始程式碼檔案 (.java), 它是位在套件對應的路徑之下, 展開套件可以看到之下的檔案清單, 以此例是 Ch12_1_1Acitivity.java, Android 應用程式的 Java 程式碼就是撰寫在此檔案 \gen 目錄在此目錄包含一個位在相同套件之下, 名為 R.java 檔案, 它是 Eclipse IDE 自動依據專案資源 ( 位在 \res 目錄 ) 建立的索引類別檔, 而且會自動更新此檔案, 使用者並不允許自行更改檔案內容 \Android 4.0 目錄此目錄名稱需視選擇的 Build Target( 建構目標 ) 而定, 例如 :4.0 版的目錄名稱為 Android 4.0, 在目錄下只有一個 android.jar 檔案, 其內容就是建立 Android 應用程式所需的類別函數庫 12-15
版面配置與使用介面元件 chapter 12 12-2 Android 專案架構 在 Eclipse IDE 建立的 Android 專案,ADT 工具預設建立多個目錄 子目錄和檔案, 以 Ch12_1_1 專案為例, 如右圖所示 : 上述 Android 專案架構的目錄與檔案說明, 如下所示 : \src 目錄此目錄的內容是 Java 類別的原始程式碼檔案 (.java), 它是位在套件對應的路徑之下, 展開套件可以看到之下的檔案清單, 以此例是 Ch12_1_1Acitivity.java, Android 應用程式的 Java 程式碼就是撰寫在此檔案 \gen 目錄在此目錄包含一個位在相同套件之下, 名為 R.java 檔案, 它是 Eclipse IDE 自動依據專案資源 ( 位在 \res 目錄 ) 建立的索引類別檔, 而且會自動更新此檔案, 使用者並不允許自行更改檔案內容 \Android 4.0 目錄此目錄名稱需視選擇的 Build Target( 建構目標 ) 而定, 例如 :4.0 版的目錄名稱為 Android 4.0, 在目錄下只有一個 android.jar 檔案, 其內容就是建立 Android 應用程式所需的類別函數庫 12-15
PART 3 Android 應用程式開發 \assets 目錄此目錄的內容預設是空的, 主要是用來存放應用程式使用到的一些不需要編譯處理的原始資料, 例如 :HTML 文件 文字檔和 SQLite 資料庫等 \res 目錄此目錄內容是 Android 應用程式使用到的所有資源, 包含一些常用的子目錄, 如下表所示 : 子目錄 內容說明 drawable-???? 不同尺寸的 JPEG 或 PNG 格式的圖形檔案, 可以使用在高 中和低不同解析度的行動裝置螢幕 layout menu values 定義使用介面版面配置的 XML 檔, 例如 :main.xml 顯示應用程式選單的 XML 檔 定義程式使用的陣列 字串 尺寸 色彩和樣式的常數值, 例如 :strings.xml AndroidManifest.xml 檔 位在專案根目錄的 AndroidManifest.xml 檔案是一個十分重要的檔案, 提供 Android 作業系統所有應用程式的基本資訊, 一個功能清單 不同於 Windows 作業系統,Android 作業系統需要透過 AndroidManifest.xml 檔案先認識這個應用程式, 才會知道如何執行此應用程式 其提供的主要資訊有 : 應用程式的完整名稱 ( 包含 Java 套件名稱 ), 它是一個唯一的識別名稱, 可以讓 Android 作業系統和 Android Market 找到應用程式 應用程式包含的活動 內容提供者 廣播接收器和服務元件 宣告應用程式執行時需要的權限, 例如 : 存取網路和 GPS 等 應用程式最小需求的 API 層級, 即專案的 Min SDK Version 欄位值 12-16
版面配置與使用介面元件 chapter 12 12-3 版面配置 版面配置 (Layout) 對於 Android 程式設計來說是一件十分重要的工作, 因為 它是建立使用介面的基礎, 可以幫助我們編排漂亮的使用介面 12-3-1 版面配置的基礎 版面配置是 android.widget 套件的類別, 一些看不見的容器物件 (ViewGroup 物件 ), 可以用來群組與編排介面元件 (View 物件, 也屬於 android.widget 套件 ), 如下圖所示 : 上述 ViewGroup1 物件是一個容器, 在之中編排 4 個 View 物件 實作上, 我們並不用撰寫程式碼來建立 ViewGroup 版面配置和 View 介面物件, 而是在 Eclipse IDE 建立版面配置資源的 XML 檔, 使用宣告方式定義使用介面擁有哪些元件和如何編排 \res\layout 目錄的版面配置資源版面配置資源是一種定義如何在螢幕上顯示的資源 ; 一種使用介面的範本, 它是位在 \res\layout 目錄的 XML 檔 簡單的說, 我們是使用宣告方式來定義使用介面擁有哪些元件,Eclipse IDE 會自動依據 XML 檔來產生 Java 類別檔 ViewGroup 版面配置類別 Android 提供多種版面配置物件, 各擁有不同預設的編排方式, 我們只需依照需求選擇版面配置來編排子介面元件 (Views), 就可以快速編排出所需的使用者介面, 如下所示 : 12-17
PART 3 Android 應用程式開發 LinearLayout 類別 : 其包含的子介面元件是一個接著一個排列成水平或垂直一條直線, 在 main.xml 是使用 <LinearLayout> 標籤 RelativeLayout 類別 : 子介面元件是相對其他子介面元件, 或貼齊父版面配置的邊線, 我們可以指定一個介面元件位在另一個介面元件的上方 下方 左邊或右邊等相對位置, 在 main.xml 是使用 <RelativeLayout> 標籤 FrameLayout 類別 : 如同堆疊來編排多個子介面元件, 所有子元件都是位在左上角的同一個位置, 每一個元件如同一頁圖層, 在 main.xml 是使用 <FrameLayout> 標籤 TableLayout 類別 : 使用表格欄與列來編排子介面元件, 每一個介面元件是新增至表格的每一列, 即 TableRow 物件, 在 main.xml 是使用 <TableLayout> 和 <TableRow> 標籤 12-3-2 LinearLayout 版面配置 LinearLayout 版面配置是最常使用的版面配置, 它可以將子介面元件排列成一列 ( 垂直 ), 或一欄 ( 水平 ), 一個接著一個排列成一直線, 如下圖所示 : 在版面配置資源的 XML 文件是使用 LinearLayout 元素來包含子元素的 View 元件, 如下所示 : <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">... </LinearLayout> 12-18
版面配置與使用介面元件 chapter 12 LinearLayout 版面配置的常用屬性說明, 如下表所示 : 屬性 orientation gravity layout_weight layout_width layout_height 說明指定版面配置的方向是 vertical 垂直, 或 horizontal 水平在包含的子元件加上此屬性, 可以指定對齊方式是 right center 和 left 等在包含子元件加上此屬性, 可以指定元件的重要性, 值的總和為 1, 例如 :3 個 Button 分別是 0.25 0.5 和 0.25, 表示中間是其他的兩倍大版面配置容器的寬度, 屬性值 fill_parent 表示填滿上一層容器的可用寬度或高度 ;wrap_content 表示剛好足夠顯示元件內容的寬與高度版面配置容器的高度, 屬性值同 layout_width Memo 在 Android 2.2 版的 fill_parent 屬性值已經更名為 match_parent, 不過為了與舊版相容, 本書仍然是使用 fill_parent Android 專案 :Ch12_3_2 在 Android 應用程式使用 2 個 LinearLayout 版面 配置編排 5 個 Button 元件, 其執行結果如右圖所示 : 上述圖例的前三個 Button 是垂直排列, 後 2 個是水平排列, 因為指定 layout_weight 屬性值 0.25 和 0.75, 所以按鈕五是按鈕四約三倍寬 XML 文件 :\res\layout\main.xml 01: <?xml version="1.0" encoding="utf-8"?> 02: <LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android" 03: android:orientation="vertical" 04: android:layout_width="fill_parent" 05: android:layout_height="fill_parent"> 12-19
PART 3 Android 應用程式開發 06: <Button android:text =" 按鈕一 " 07: android:layout_width="fill_parent" 08: android:layout_height="wrap_content" 09: android:gravity ="left"/> 10: <Button android:text =" 按鈕二 " 11: android:layout_width="fill_parent" 12: android:layout_height="wrap_content" 13: android:gravity ="center"/> 14: <Button android:text =" 按鈕三 " 15: android:layout_width="fill_parent" 16: android:layout_height="wrap_content" 17: android:gravity ="right"/> 18: <LinearLayout android:orientation="horizontal" 19: android:layout_width="fill_parent" 20: android:layout_height="wrap_content"> 21: <Button android:text =" 按鈕四 " 22: android:layout_width="wrap_content" 23: android:layout_height="wrap_content" 24: android:layout_weight="0.25"/> 25: <Button android:text =" 按鈕五 " 26: android:layout_width="wrap_content" 27: android:layout_height="wrap_content" 28: android:layout_weight="0.75"/> 29: </LinearLayout> 30: </LinearLayout> 文件說明第 2~30 列 : LinearLayout 元素是垂直排列, 在之中有 3 個子 Button 元件 ( 指定 gravity 屬性對齊左 中和右 ) 和另一個 LinearLayout 版面配置, 換句話說, 我們可以使用巢狀版面配置來建立複雜的使用介面 第 18~29 列 : 使用另一個 LinearLayout 元素編排 2 個 Button 元件, 並且指定 layout_weight 屬性值為 0.25 和 0.75 Memo 請注意! 垂直或水平編排的 LinearLayout 版面配置會影響子元件的 layout_wight 和 layout_height 屬性值, 例如 :LinearLayout 根元素的 4 個子元素, 其 layout_height 屬性值是 wrap_content; 不能是 fill_parent, 因為是垂直排列, 如果高是 fill_parent, 就只會顯示第 1 個 Button 元件, 因為它已經佔滿所有可用的高度 同理, 在第二層 LinearLayout 元素是水平排列, 所以子元件的 layout_width 屬性只能是 wrap_content; 不能是 fill_parent, 如果寬是 fill_parent, 也只會顯示第 4 個 Button 元件 12-20
版面配置與使用介面元件 chapter 12 12-3-3 TableLayout 版面配置 TableLayout 版面配置使用表格的欄與列來編排子介面元件, 每一個介面元件是新增至表格的每一列, 即 TableRow 物件, 如右圖所示 : 在版面配置資源的 XML 文件是使用 TableLayout 元素來包含子元素, 如下所示 : < TableLayout android:layout_width="fill_parent" android:layout_height="fill_parent"> <TableRow > </TableRow> </TableLayout > 上述 TableLayout 元素之中是使用 TableRow 元素來定義每一列的介面元件 Android 專案 :Ch12_3_3 在 Android 應用程式使用 TableLayout 版面配置編排 6 個 Button 元件, 類似 2 列 3 欄的表格, 其執行結果如下圖所示 : XML 文件 :\res\layout\main.xml 01: <?xml version="1.0" encoding="utf-8"?> 02: <TableLayout xmlns:android= "http://schemas.android.com/apk/res/android" 12-21
PART 3 Android 應用程式開發 03: android:layout_width="fill_parent" 04: android:layout_height="fill_parent"> 05: <TableRow> 06: <Button android:text =" 按鈕一 " 07: android:layout_width="wrap_content" 08: android:layout_height="wrap_content"/> 09: <Button android:text =" 按鈕二 " 10: android:layout_width="wrap_content" 11: android:layout_height="wrap_content"/> 12: <Button android:text =" 按鈕三 " 13: android:layout_width="wrap_content" 14: android:layout_height="wrap_content"/> 15: </TableRow> 16: <TableRow> 17: <Button android:text =" 按鈕四 " 18: android:layout_width="wrap_content" 19: android:layout_height="wrap_content"/> 20: <Button android:text =" 按鈕五 " 21: android:layout_width="wrap_content" 22: android:layout_height="wrap_content"/> 23: <Button android:text =" 按鈕六 " 24: android:layout_width="wrap_content" 25: android:layout_height="wrap_content"/> 26: </TableRow> 27: </TableLayout> 文件說明 第 2~27 列 : TableLayout 元素之中有 2 個 TableRow 子元素, 各有 3 個 Button 元件, 每一個 TableRow 元素就是表格的一列 12-4 介面元件的基礎 View 類別是 Android SDK 建構使用介面的基礎, 每一個 View 物件佔用螢幕上 一個長方形區域, 負責繪出使用介面的圖形與事件處理 12-4-1 View 與 ViewGroup 類別 View 類別是所有使用介面元件的基礎類別 ( 直接或間接父類別 ), 其繼承的子 類別分成兩大類, 如下所示 : 12-22
版面配置與使用介面元件 chapter 12 介面元件 (Widgets, 可稱為 View 物件 ): 正確的說,Android 的介面元件是 Widget; 不是 View,Widget 是 View 的子類別, 就是一些與使用者互動的圖形介面元件, 例如 :Button 和 EditText 元件等 版面配置類別 (Layout Class, 可稱為 ViewGroup 物件 ):ViewGroup 抽象類別是 View 的子類別, 它是版面配置類別的父類別, 一種看不見的容器類別, 用來組織其他介面元件和 ViewGroup 物件 Memo 在物件導向的類別架構中, 宣告成父類別的物件變數, 一樣可以參考子類別的物件, 換句話說, 我們可以將所有 Widget 類別建立的物件通稱為是一種 View 物件 ;LinearLayout FrameLayout 和 TableLayout 等版面配置類別建立的物件稱為是一種 ViewGroup 物件 Android 應用程式的使用介面, 以 Java 程式碼的角度來看, 在活動視窗的使用 介面是一棵 View 和 ViewGroup 物件組成的樹狀結構, 如下圖所示 : 上述樹狀結構代表螢幕上顯示介面元件的架構, 在根 ViewGroup 物件之中可以 包含多個 View 物件, 或另一個 ViewGroup 物件, 可以編排另一組 View 物件 例如 : 第 12-3-1 節的 Android 專案, 其使用介面的樹狀結構, 如下圖所示 : 12-23
chapter 12 學習評量 1. 請建立一個名為 MyBookTitle 的 Android 專案, 版本是 4.0, 可以顯示本書的書名 2. 請問在版面配置 main.xml 檔案是如何存取儲存在 strings.xml 的字串資源? 3. 請簡單說明 Android 專案的目錄架構? 4. 請說明什麼是版面配置?ViewGroup 版面配置類別有哪幾種? LinearLayout 版面配置是如何顯示介面元件? 5. 請問什麼是 View 與 ViewGroup 類別? 並且試著繪出第 12-3-3 節 Andrioid 專案的使用介面樹狀結構, 類似第 12-4-1 節的說明 6. 請簡單說明 Android 使用的尺寸單位? 7. 介面元件可以顯示文字內容 ; 介面元件可以輸入文字內容 和 元件是選擇功能的介面元件 8. 請修改第 12-3-2 節的專案, 改為編排 TextView 介面元件, 標題文字就是按鈕的標題文字 9. 請在 Eclipse IDE 新增 Android 專案, 然後建立 BMI 計算機的使用介面, 可以輸入身高和體重, 再加上一個名為 計算 的按鈕 10. 請在 Eclipse IDE 新增 Android 專案, 然後建立速食店兒童餐的點餐系統使用介面, 可以選擇主餐 薯條和飲料, 再加上一個名為 點餐 的按鈕 12-32