Google Android 應用程式開發實戰

Similar documents
主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

res/layout 目录下的 main.xml 源码 : <?xml version="1.0" encoding="utf 8"?> <TabHost android:layout_height="fill_parent" xml

多媒體應用 13 新增專案並完成版面配置 <ExMusic01> <activity_main.xml> ImageView ID imgplay ImageView ID imgstop ImageView ID imgfront TextView ID txtsong TextView ID t

840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00

投影片 1

0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e

Android Android Android SDK iv

The Embedded computing platform

Microsoft Word - 第1章 Android基本概念.docx

Microsoft Word - 02.目錄.doc

Android Service

PowerPoint 簡報

Android Fragment

The golden pins of the PCI card can be oxidized after months or years

運算子多載 Operator Overloading

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class

人民邮电


Dynamic Layout in Android

ACI pdf

10-2 SCJP SCJD 10.1 昇陽認證 Java 系統開發工程師 的認證程序 Java IT SCJD

投影片 1

使用手冊

輕鬆學 Dreamweaver CS5 網頁設計..\Example\Ch0\ \.html..\example\ch0\ \mouse.txt..\example\ch0\ \ _Ok.html 學習重點 JavaScript 複製程式碼 mouse.txt Ctrl+C Ctrl+C 0-4

Microsoft PowerPoint - 05.Android 介面元件-RelativeLayout、Button、TextVeiw、EditText

Lecture01_Android介绍

内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌

<img>

書面

Excel VBA Excel Visual Basic for Application

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

Microsoft Word - 投影片ch11

1. 2. Flex Adobe 3.

内 容 提 要 将 JAVA 开 发 环 境 迁 移 到 Linux 系 统 上 是 现 在 很 多 公 司 的 现 实 想 法, 而 在 Linux 上 配 置 JAVA 开 发 环 境 是 步 入 Linux 下 JAVA 程 序 开 发 的 第 一 步, 本 文 图 文 并 茂 地 全 程 指

Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2

Android 开发教程

AutoCAD 用戶如何使用 ArchiCAD

RecyclerView and CardVew

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

Java 程式設計初階 第 5 章:基本輸出入 & 流程控制

Microsoft PowerPoint - 07.Android 介面元件-TableLayout、Toast、AlertDialog

導讀 ASP.NET HTML ASP 第一篇 基礎篇第 1 章 認識 ASP.NET ASP.NET ASP.NET ASP.NET ASP.NET 第 2 章 認識 Visual Studio 20 開發環境 Visual Studio 20 Visual Studio 20 第二篇 C# 程式

If Close[Length]!= 0 Then B Close[Length] 是 Length 日前的 Close 不是 0 的話則執行 B % Number 以 Divisor 來求取除法並傳回剩下的部份和 Divisor 具備相同的符 號 格式 :Number % Divisor Numb

Spyder Anaconda Spyder Python Spyder Python Spyder Spyder Spyder 開始 \ 所有程式 \ Anaconda3 (64-bit) \ Spyder Spyder IPython Python IPython Sp

HTML網頁基礎語言

建立Android新專案

¥¼©R¦W-5

PowerPoint 簡報

附录J:Eclipse教程

chapter 2 HTML5 目錄iii HTML HTML HTML HTML HTML canvas

Microsoft Word zw

CC213

Microsoft Word - ACG chapter00c-3ed.docx

一、

96年特種考試第一次司法人員考試試題解答

街街街街街街街街

Microsoft Word - ACI chapter00-1ed.docx

文档 3

untitled


Microsoft PowerPoint - 04-array_pointer.ppt

2 第 章 绪 论 Internet 2.0 使 得 消 费 型 电 子 产 品 用 户 可 以 通 过 多 种 不 同 的 数 据 网 络 访 问 互 联 网 内 容 用 户 可 以 使 用 便 携 式 消 费 型 电 子 设 备, 如 智 能 手 机 触 屏 平 板 电 脑 电 子 书, 甚 至

投影片 1

Java 1 Java String Date

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO

Microsoft Word - ch04三校.doc

Microsoft PowerPoint - VB14.ppt

Microsoft Word - AEL CH07

《大话设计模式》第一章

Microsoft Word - 投影片ch13

The Embedded computing platform

Microsoft Word - 投影片ch03

Microsoft Word - ACL chapter02-5ed.docx

Microsoft PowerPoint - VB5

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

投影片 1

ltu

02 2 成立 Facebook 粉絲專頁 Facebook Facebook Facebook 1, Facebook Facebook 1 Facebook 2-21

contents 1 4 Chapter 2 Chapter 5 Chapter 管理自動儲存的版本 以文件復原窗格復原檔案 自訂快速工具 自訂快速存取工具列 自訂功能區

投稿類別:資訊類

< FB14EA5D028B2C4A447A6B8B4ABC0C9295FB05DAC46B3A1A4BDB0C8ADFBB9EFA644A8C6B0BBAC64C576AF715FA4BAADB D6D5FB3E6A6E22E696E6464>

2016 勒索軟體白皮書

Chapter 9: Objects and Classes

学 院 人 才 培 养 分 项 自 评 报 告 结 果 汇 总 表 主 要 评 估 指 标 关 键 评 估 要 素 自 评 等 级 1.1 学 校 事 业 发 展 规 划 合 格 1. 领 导 作 用 1.2 办 学 目 标 与 定 位 合 格 1.3 对 人 才 培 养 重 视 程 度 合 格 1

「西醫基層總額支付委員會《第28次委員會議紀錄

Wy159.mps

Microsoft Word - 01.DOC

Java

Transcription:

流程控制結構 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