Part 2 開始我們的 Android 程式設 計之旅 單元 4 安裝 Android 程式開發工具 單元 5 使用 Eclipse 建立第一個 Android 應用程式單元 6 瞭解 Android 程式專案的架構和執行流程單元 7 使用 TextView EditText 和 Button 介面元件單元 8 程式的錯誤類型和除錯方法單元 9 Eclipse 進階程式專案管理技巧單元 10 讓程式有美好的未來 - 良好的程式架構單元 11 查詢 Android SDK 中的程式設計說明文件 1
單元 4 安裝 Android 程式開發工具 2
安裝 Android 程式開發工具的硬體需求 Android 程式開發工具都是使用 Java 語言撰寫, Java 程式的執行速度先天就比較緩慢, 而且需要佔用較多的記憶體, 因此如果你的 CPU 不夠快, 或是記憶體不夠大, 在操作的過程中會經常處於等待的狀態 CPU 時脈 2.5GHz( 建議雙核心以上 ) 記憶體 1GB 硬碟剩餘空間 3GB 3
安裝 Android 程式開發工具的軟體需求 Android 應用程式開發工具完全免費, 只要上網就可以下載 作業系統 Windows XP Windows Vista Windows 7 Linux Mac OS Java Development Kit (JDK) 一定要安裝 JDK 而不能只安裝 JRE(JDK 包含 JRE), JDK 的版本必須是 JDK5 或 JDK6 4
安裝 Android 程式開發工具的軟體需求 Eclipse 目前已經發展出支援多種程式語言開發的版本, 包括 Java C/C++ PHP Software modeling 等 我們需要的版本是 Eclipse IDE for Java Developers Android Development Tools (ADT) plugin for Eclipse 這是用來撰寫 Android 程式的工具軟體, 它是一個 Eclipse 的 plugin( 插件 ), 也就是必需安裝在 Eclipse 中和 Eclipse 一起運作 Android Software Development Kit (Android SDK) 包括開發 Android 程式的過程中需要用到的資源, 像是程式庫 程式除錯工具 手機模擬器等 5
安裝 Android 程式開發工具的步驟 (1/) Step 1. 安裝 JDK 執行 Windows 控制台 > 新增或移除程式, 找找看其中是否有一項叫做 Java SE Development Kit ( 舊的 JDK 名稱叫做 Java 2 SDK, SE ), 注意版本必須是 5 或 6, 如果找不到或是版本比 5 或 6 還低, 請先將舊版的 JDK 移除, 然後安裝新的版本, 請開啟下列 Java 網址下載軟體並完成安裝 http://www.oracle.com/technetwork/java/javase/dow nloads/index.html 6
安裝 Android 程式開發工具的步驟 (2/) Step 2. 安裝 Eclipse Eclipse 這個程式開發平台不僅功能強大, 還有一個優點就是不需要安裝, 只要把它解壓縮到一個新的資料夾就可以執行 首先我們到 Eclipse 的官方網站下載 Eclipse IDE for Java Developers http://www.eclipse.org/ 完成下載後請建立一個新的資料夾, 例如你可以在 c:\program Files 中新增一個名為 Eclipse 的資料夾, 然後把下載的 zip 檔全部解壓縮到該資料夾即可完成 Eclipse 的安裝, 在資料夾的名稱中不要使用中文, 否則在執行開發工具的過程中可能會出現錯誤 當要啟動 Eclipse 時, 只要執行其中的 eclipse.exe 即可 7
安裝 Android 程式開發工具的步驟 (3/) Step 3. 安裝 Android Development Tools (ADT) plugin for Eclipse ADT plugin for Eclipse 可以在 Eclipse 主程式中完成下載和安裝 執行 eclipse.exe, 然後選擇 Help>Install New Software 就會出現如下的對話盒, 按下對話盒右邊的 Add 按鈕並輸入下列資訊 Name: Android plugin Location: https://dlssl.google.com/android/e clipse/ 然後按下 OK, 在對話盒中央的清單會出現 Developer Tools 項目, 把該項目打勾然後進行安裝 8
安裝 Android 程式開發工具的步驟 (4/) Step 4. 安裝 Android Software Development Kit (Android SDK) 請開啟網頁瀏覽器在網址列輸入下列網址 http://developer.android.com/sdk/index.html 網頁上會列出不同作業系統的 Android SDK 版本, 點選適合的檔案進行下載, 再把下載的檔案解壓縮到第二個步驟中的 Eclipse 資料夾, 它會自動產生一個名為 android-sdk 的新資料夾 在該資料夾下找到一個名為 SDK Manager.exe 的執行檔將它啟動, 在出現的對話盒中會列出許多項目, 包括不同的 SDK 版本 (SDK Platform And X.X APIX) 程式範例 (Samples for SDK APIX) Google 額外提供的 API(Google APIs by Google Inc) 以及若干其它項目, 可以把所有的項目全部打勾一起安裝 9
安裝 Android 程式開發工具的步驟 (5/) Step 5. 在 Eclipse 中設定 Android SDK 的路徑執行 Eclipse, 點選選單上的 Window>Preferences 便會出現如下的對話盒, 在對話盒的左邊點選 Android 項目, 然後在右邊的 SDK Location 中填上 android-sdk 資料夾的完整路徑 ( 也可以使用右邊的 Browse 按鈕來選擇 ), 最後按下下方的 Apply 按鈕, 再按下 OK 按鈕 10
安裝 Android 程式開發工具的步驟 (6/) Step 6. 建立一個 Android Virtual Device (AVD) AVD 就是 Android SDK 中的手機模擬器, 請先執行 Eclipse, 點選選單上的 Window>Android SDK and AVD Manager 就會出現如下的對話盒, 在對話盒中點選左邊的 Virtual devices 再按下右邊的 New 按鈕便會出現另一個對話盒, 在 Name 欄位中幫這個虛擬手機取一個名稱, 在 Target 欄位中選擇一個 Android 的版本, 在下方的欄位中還可以指定 SD 卡的容量 手機的外觀和螢幕的解析度, 最後按下 Create AVD 按鈕 11
Android 程式開發工具的維護和更新 移除 JDK 再重新安裝執行 Windows 控制台 > 新增或移除程式, 尋找其中名為 Java SE Development Kit 的項目 該項目名稱的後面會有一個數字表示版本號碼 ( 例如 5 或 6), 如果想要移除舊的版本, 可以先用滑鼠點選它, 然後按下移除按鈕 要安裝新版的 JDK 首先要連到 JDK 的官方網站下載想要的 JDK 版本, 然後執行它的執行檔即可完成安裝 移除 Eclipse 再重新安裝只要刪除它所在的資料夾即可 但是刪除 Eclipse 會把我們已經安裝好的 Android 程式開發工具也一併刪除, 所以複製好新版的 Eclipse 之後, 必須依照前面介紹的步驟把 Android 程式開發工具重新安裝一次 12
Android 程式開發工具的維護和更新 移除 ADT plugin for Eclipse 再重新安裝執行 Eclipse 然後點選選單 Help>About Eclipse, 在出現的對話盒中按下 Installation Details 按鈕就會列出安裝在 Eclipse 中的工具, 請找出 Android DDMS Android Development Tools 和 Android Hierarchy Viewer 3 個項目, 點選它們後 ( 可以同時按住鍵盤上的 Ctrl 鍵進行多重選擇 ) 按下下方的 Uninstall 按鈕就可移除 如果是想要更新, 就按 Update 按鈕 移除 Android SDK 再重新安裝在 Eclipse 執行檔的資料夾中, 找到名為 android-sdk 的資料夾, 把其中的檔案全部刪除 然後依照前面介紹的安裝步驟重新安裝 Android SDK 如果是要更新, 可以執行 android-sdk 資料夾中的 SDK Manager.exe 13
Android 程式開發工具的維護和更新 移動 Eclipse 程式的資料夾如果有一天突然想把 Eclipse 程式的資料夾搬到其它地方也是可以, 只不過必須重新設定 Eclipse 中的 Android SDK 資料夾路徑 請讀者依照前面介紹的步驟重新完成設定即可 14
單元 5 使用 Eclipse 建立第一個 Android 應用程式 15
建立一個新的 Android 應用程式專案 Step 1. 執行 Eclipse 程式 Step 2. 從選單中選擇 File > New > Project 16
建立一個新的 Android 應用程式專案 Step 3. 在對話盒中間的清單中點選 Android > Android Project, 再按下 Next 按鈕 Project Name: 自己幫此專案取一個名字, 例如 first 勾選 Create new project in workspace 項目 Build Target: 選擇此專案使用的 Android SDK 版本 Application Name: 執行程式時顯示在手機螢幕上方的標題 Package Name 決定程式在專案資料夾中的儲存路徑, 它是用網址的格式來表示, 注意至少要有兩層, 也就是 xxx.xxx Create Activity: 程式的主類別名稱, 例如可以輸入 Main 17
建立一個新的 Android 應用程式專案 Step 4. 點選上方工具列中的 Run 按鈕就會出現如下的對話盒, 它是用來設定程式的執行模式, 每一個程式專案第一次執行的時候都會出現這個對話盒, 請讀者選擇 Android Application 再按下 OK 按鈕 18
建立一個新的 Android 應用程式專案 Eclipse 會自動啟動虛擬手機, 然後把程式安裝上去並執行, 只是整個過程可能需要數十秒甚至是一分鐘, 時間的長短取決於電腦的執行速度, 最後會看到如下結果 19
修改顯示文字並加上按鈕 Step 1. 請用滑鼠點選 Eclipse 左邊專案檢視視窗中的專案名稱將專案展開 20
修改顯示文字並加上按鈕 Step 2. 專案名稱下面有幾個資料夾, 請打開其中的 res 資料夾, 然後打開裡頭的 values 資料夾, 再用滑鼠快按二下 strings.xml 檔,strings.xml 檔便會出現在 Eclipse 中央的編輯視窗 Step 3. strings.xml 有二種編輯模式, 第一種是 Resources 模式, 左邊會有一個項目清單, 還會有一些控制按鈕, 右邊是每一個項目的說明和設定值, 第二種模式是原始的 xml 檔文字模式 如果讀者已經熟悉 xml 檔的語法, 可以直接在 xml 檔文字模式下進行編輯 現在請先使用 Resources 模式, 點選 hello (String) 項目, 再把右邊的 Value 欄位的內容改成 你好, 這個程式的主要類別名稱叫做 Main 21
修改顯示文字並加上按鈕 Step 4. 仿照第二步的方法打開 res>layout>main.xml 檔 Step 5. 在最後一行的上方, 也就是 </LinearLayout> 的上一行插入下列的程式碼, 輸入時請注意遵守原來檔案的鋸齒狀編排格式以方便閱讀程式碼 <Button android:layout_width="fill_parent android:layout_height="wrap_content /> <ImageButton android:layout_width="fill_parent android:layout_height="wrap_content android:src="@drawable/icon /> 22
修改顯示文字並加上按鈕 完成後請讀者按下上方工具列中的 Run 按鈕, 就可以看到如下的結果 23
單元 6 瞭解 Android 程式專案的架 構和執行流程 24
Android 程式的執行流程 Android 程式專案的程式碼是放在專案的 src 資料夾, 該資料夾中會根據建立專案時輸入的 Package Name 建立一個 Package, 再把程式檔置於其中, 而程式檔的名稱就是在建立專案時輸入的 Activity 名稱 package tw.android; import android.app.activity; import android.os.bundle; 指定程式介面 public class Main extends Activity { /** Called when the activity is first created. */ @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); } } 25
程式專案的資源類別 程式專案的資源類別 gen/(package Name)/R.java, 這個類別中整合了這個程式專案中所有的資源, 包括 drawable( 圖檔 ) layout( 程式介面 ) 和 string ( 字串 ) 等不同的子類別 它是由 Android 程式編譯器自動產生, 請不要做任何修改, 其中的子類別 layout 中的 main 屬性就是對應到專案下的 res/layout/main.xml 檔 26
程式專案的資源類別 package tw.android; public final class R { public static final class attr { } public static final class drawable { public static final int icon=0x7f020000; } public static final class layout { public static final int main=0x7f030000; } public static final class string { public static final int app_name=0x7f040001; public static final int hello=0x7f040000; } } drawable( 圖檔 ) layout( 程式介面 ) string( 字串 ) 27
單元 7 使用 TextView EditText 和 Button 介面元件 28
TextView 介面元件 TextView 介面元件的功能是顯示訊息, 使用者無法編輯其中的文字, 我們可以依照如下的語法格式在介面佈局檔中加入 TextView 元件 <TextView android:id="@+id/ 自訂元件名稱 " android: 屬性 =" 屬性值 " /> 這是 xml 的語法,TextView 是標籤名稱, 後面則是它的屬性 第一個屬性 android:id 是設定這個 TextView 元件的名稱, 它的值 @+id / 自訂元件名稱 其中的 @+id / 是一個指令, 指示要將後面的元件名稱加入程式資源 R 中的 id 類別 29
TextView 介面元件 <TextView android:id="@+id/txtresult" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text=" 程式執行結果 " /> 增加一個名為 txtresult 的 TextView 元件, 它的寬度是填滿它所在的外框 它的高度則由文字的高度來決定, 元件中會顯示 程式執行結果 這個字串 30
EditText 介面元件 EditText 元件可以讓使用者在上面編輯文字, 再讓程式讀取該字串, 我們可以依照如下的語法格式在介面佈局檔中加入 EditText 元件 <EditText android:id="@+id/ 自訂元件名稱 " android: 屬性 =" 屬性值 " /> 和前面的 TextView 元件的語法比較, 二者除了標籤名稱不同以外其餘的格式都一樣 31
EditText 介面元件 <EditText android:id="@+id/edtsex" android:layout_width="fill_parent" android:layout_height="wrap_content" android:inputtype="text" android:text="" /> 上面的範例中新出現了一個 android:inputtype 屬性, 它是用來限制這個元件中可以輸入的字元類型,text 表示任何字元都可以接受, 如果設定成 number 則只能輸入 0~9 的數字字元 32
Button 介面元件 Button 元件是讓使用者按下以啟動程式的某一項功能, 我們可以依照如下的語法格式在介面佈局檔中加入 EditText 元件 <Button android:id="@+id/ 自訂元件名稱 " android: 屬性 =" 屬性值 " /> 33
Button 介面元件 <Button android:id="@+id/btndosug" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text=" 執行 " /> 會在手機螢幕上建立一個按鈕, 按鈕上面顯示 執行 34
介面佈局檔範例 <?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=" 性別 :" /> <EditText android:id="@+id/edtsex android:layout_width="fill_parent" android:layout_height="wrap_content" android:inputtype="text" android:text="" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text=" 年齡 :" /> <EditText android:id="@+id/edtage" android:layout_width="fill_parent" android:layout_height="wrap_content" android:inputtype="number" android:text="" /> <Button android:id="@+id/btndosug" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text=" 婚姻建議 " /> <TextView android:id="@+id/txtresult" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text=" 結果 " /> </LinearLayout> 35
介面佈局檔範例 36
連結介面元件和程式碼 介面元件和程式碼之間必須能夠互動以完成下列 3 件事 : 1. btndosug 按鈕被按下時, 程式會開始執行判斷的程式碼 ; 2. 程式碼必須能夠讀取 edtsex 和 edtage 這二個 EditText 元件中的字串 ; 3. 程式碼必須將最後的判斷結果顯示在 txtresult 元件中 37
設定 Button 元件的 click 事件 listener Android 這種圖形介面的程式架構就是利用各式各樣的事件處理程序來執行使用者的操作, 而事件處理程序在 Android 程式中就稱為事件 listener 要設定 Button 元件的事件 listener 需要完成下列 3 個步驟 : Step 1. 建立一個 Button 的 OnClickListener 物件 Button.OnClickListener btndosugonclick = new Button.OnClickListener() { public void onclick(view v) { // 按下按鈕後要執行的程式碼 } } 38
設定 Button 元件的 click 事件 listener Step 2. 在程式碼中取得 res/layout/main.xml 介面檔中的 Button 元件定義在介面佈局檔中的所有元件在經過編譯之後都會放在 gen/ 套件名稱 /R.java 資源檔中, 我們可以利用 findviewbyid() 這個方法從 R.java 檔中取得介面元件 Button btndosug = (Button)findViewById(R.id.btnDoSug); 我們將取得的 btndosug 元件存入一個同名的 Button 物件 其實這二個物件的名稱也可以不同, 只是為了容易辨識, 我們故意使用相同的名稱 39
設定 Button 元件的 click 事件 listener Step 3. 把在第一個步驟中建立的 OnClickListener 物件, 設定成第二個步驟中的 Button 物件的 click 事件 listener btndosug.setonclicklistener(btndosugonclick); 40
程式檔的架構 public class Main extends Activity { private Button btndosug; private EditText edtsex, edtage; private TextView txtresult; /** Called when the activity is first created. */ @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); // 從資源類別 R 中取得介面元件 btndosug = (Button)findViewById(R.id.btnDoSug); edtsex = (EditText)findViewById(R.id.edtSex); edtage = (EditText)findViewById(R.id.edtAge); } } txtresult = (TextView)findViewById(R.id.txtResult); // 設定 button 元件的事件 listener btndosug.setonclicklistener( btndosugonclick); private Button.OnClickListener btndosugonclick = new Button.OnClickListener() { public void onclick(view v) { // 按下按鈕後要執行的程式碼 } }; 41
取得 edtsex 和 edtage 介面元件中的字串 可以利用 EditText 物件本身提供的 gettext() 方法來取得字串, 然後把字串資料轉成 String 型態存入一個 String 物件中 我們也可以利用同樣的方法取得 edtage 中的字串, 不過因為年齡應該是數值型態, 所以我們再將得到的 String 物件轉成 int 型態的資料 String strsex = edtsex.gettext().tostring(); int iage = Integer.parseInt(edtAge.getText().toString()); 42
將結果顯示在 txtresult 介面元件 將程式要顯示的訊息存入一個 String 物件, 再把該物件利用 txtresult 物件的 settext() 方法設定給它即可 String strsug = 程式的執行結果 ; txtresult.settext(strsug); 43
完整的 Button 元件的 OnClickListener 程式碼 private Button.OnClickListener btndosugonclick = new Button.OnClickListener() { public void onclick(view v) { // 按下按鈕後要執行的程式碼 String strsex = int iage = edtsex.gettext().tostring(); Integer.parseInt(edtAge.getText().toString()); String strsug = " 結果 :"; if (strsex.equals(" 男 ")) if (iage < 28) strsug += " 不急 "; else if (iage > 33) strsug += " 趕快結婚 "; else strsug += " 開始找對象 "; }; } else if (iage < 25) strsug += " 不急 "; else if (iage > 30) strsug += " 趕快結婚 "; else strsug += " 開始找對象 "; txtresult.settext(strsug); 44
手機輸入中文的方法 用滑鼠點選任何一個 EditText 元件準備輸入資料時, 手機螢幕下方就會自動出現一個虛擬鍵盤 45
手機輸入中文的方法 點選該鍵盤左下方的 中文 ( 英文 ) 按鈕切換中英文輸入模式, 或是利用該按鈕右邊的 符號數字 按鈕切換到符號數字鍵盤 Android 手機的中文輸入是使用 谷歌拼音, 也就是所謂的 漢語拼音, 它是利用 26 個英文字母代替注音符號, 詳細的對照表可以到下列網址查詢 http://www.cccla-us.org/pinyin.htm 46
手機輸入中文的方法 如果想要自己選擇輸入法, 可以先用滑鼠點選任何一個 EditText 元件, 然後再按一次不要放開就會出現一個選單, 請選擇其中的 Input method 就會出現所有輸入法的清單 47
單元 8 程式的錯誤類型和除錯方 法 48
程式的錯誤類型 1. 語法錯誤程式碼不符合程式語言的語法 2. 邏輯錯誤程式已經可以執行, 只是執行的結果不對 例如要計算輸入的成績總分, 但是加總的結果不對 3. 執行時期錯誤 ( 又稱為例外 ) 程式在執行過程中彈出非預期的終止訊息就表示出現執行時期錯誤 49
程式的語法錯誤和除錯的方法 語法錯誤是最明顯也是最容易解決的錯誤類型, 目前許多程式碼編輯器都有即時檢查語法的功能, 只要有錯誤就會立刻標示出來, 包括我們使用的 Eclipse 也是如此 某一行程式的前面出現紅色打叉符號就表示該行有語法錯誤, 在該行的某處會有紅色波浪底線, 把滑鼠游標移到波浪底線上面時, 會彈出一個說明視窗 50
程式的邏輯錯誤和除錯的方法 遇到這種錯誤我們可以採取下列步驟 : Step 1. 首先思考可能在哪一段程式碼出錯 Step 2. 在可能出錯的程式碼的第一行設定一個中斷點 所謂中斷點就是當程式在除錯模式下, 執行到該處就會暫停 設定中斷點的方式是點選 Eclipse 上方選單的 Run > Toggle Breakpoint 就會在目前編輯游標所在的那一行程式碼標示一個中斷點, 也就是那一行的最前面會出現一個小圓點 要取消中斷點時, 直接在小圓點上按二下即可 51
程式的邏輯錯誤和除錯的方法 Step 3. 點選工具列上的小蟲按鈕 ( 稱為 Debug 按鈕 ), 讓程式以除錯模式執行 Step 4. 操作程式讓程式進入設定中斷點的程式碼, 當程式執行到中斷點時會彈出一個訊息視窗, 通知我們即將切換到除錯畫面, 這時候請按下 Yes 按鈕 52
程式的邏輯錯誤和除錯的方法 Step 5. Eclipse 切換到除錯 (Debug) 畫面 左邊中央的視窗就是程式碼視窗, 在中斷點那一行前面會有一個箭頭表示目前程式正要執行該行 畫面的右上方視窗則會列出程式中的變數, 你可以看到每一個變數的值, 也可以點一下某一個變數的值然後將它修改, 程式就會用修改後的值繼續執行 主要工具列的下方 ( 也就是 Debug 視窗的上方 ) 有一個除錯工具列可以控制程式的執行 53
程式的邏輯錯誤和除錯的方法 Step 6. 要終止除錯模式時, 先用滑鼠點選左上方 Debug 視窗中的程式專案名稱, 然後按下除錯工具列上的停止按鈕, 最後再按一下主工具列最右邊的 Java 按鈕就會回到原來的程式編輯畫面 54
執行時期錯誤和除錯的方法 找出發生執行時期錯誤的原因也可以利用前面介紹的設定中斷點的方式, 或是利用以下介紹的 log 方法來除錯 55
執行時期錯誤和除錯的方法 要讓程式產生 log 必須先在程式前面 import 以下套件 import android.util.*; 然後再使用以下指令 Log.d( 這個 log 訊息的分類標籤, 訊息 ); 每一個 log 都可以設定一個標籤以方便分類和搜尋, 但是目前 log 只能使用英文, 因為中文會顯示亂碼 56
執行時期錯誤和除錯的方法 Android 作業系統在執行的過程中會自動產生許多 log 訊息 ( 在除錯模式右下方的 LogCat 視窗中 ), 為了能夠找出我們的程式所產生的 log, 我們可以把程式名稱當成是 log 的標籤, 為了過濾出我們程式所產生的 log, 可以點選 LogCat 視窗上方工具列中的 + 按鈕, 然後在出現的 Log Filter 對話盒中輸入 filter 名稱, 在 by Log Tab 欄位輸入要查看的標籤名稱, 在 LogCat 視窗中就會列出我們的程式的所有 log 訊息 57
單元 9 Eclipse 進階程式專案管理技 巧 58
根據已經寫好的程式原始檔來建立專案 網路上也有別人已經寫好的 Android 應用程式原始碼可供下載, 但是這些網路上的 Android 程式原始碼並不是程式專案的形式, 我們必須在下載後將它建立成程式專案 Step 1. 首先思考可能在哪一段程式碼出錯 Step 2. 點選 File > New > Project Step 3. 在對話盒中央的清單中選擇 Android > Android Project 再按下 Next 按鈕 Step 4. 點選 Create project from existing source, 然後按下 Browse 按鈕選取程式原始檔所在的資料夾, 最後按下 OK 按鈕回到原來的對話盒 59
根據已經寫好的程式原始檔來建立專案 Step 5. Project name 欄位和下方的專案 Properties 相關欄位都會自動填入資料, 但是 Build Target 必須由我們決定, 請從 Android 的版本清單中勾選一個適合的版本 Step 6. 按下 Finish 按鈕 60
根據 Android SDK 中的程式範例來建立專案 Android SDK 中有許多程式範例, 這些程式範例是學習 Android 程式設計很好的參考資料, 我們可以把它們建立成程式專案來看看執行結果 Step 1. 執行 Eclipse Step 2. 點選 File > New > Project Step 3. 在對話盒中央的清單中選擇 Android > Android Project 再按下 Next 按鈕 Step 4. 點選 Create project from existing sample Step 5. 在 Build Target 清單中選擇想要使用的 Android 版本 61
根據 Android SDK 中的程式範例來建立專案 Step 6. 完成之後在 Samples 欄位就會出現下拉式清單讓我們選擇想要的範例, 請從中選取一個, 再按下 Finish 按鈕 62
把建立好的 Android 程式專案載入 Eclipse 如果使用上面 2 種方法建立專案的過程中出現錯誤訊息, 那就表示所指定的資料夾中已經是一個完整的程式專案形式, 這時候我們要改用 import 專案的方式來載入 另外如果我們想要修改一個已經建立好的程式專案, 但又想保留原來的專案, 這時候可以先用 Windows 檔案總管複製該專案的整個資料夾, 然後修改複製資料夾的名稱, 接著再用以下的 import 方法來載入複製後的專案 63
把建立好的 Android 程式專案載入 Eclipse Step 1. 執行 Eclipse Step 2. 點選 File > Import Step 3. 在對話盒中央的清單中選擇 General > Existing Projects into Workspace 再按下 Next 按鈕 Step 4. 在對話盒中點選 Select root directory, 再按下右邊的 Browse 按鈕, 然後選取專案所在的資料夾 64
把建立好的 Android 程式專案載入 Eclipse Step 5. 在對話盒中央的 Projects 清單中會列出找到的專案名稱, 確定無誤後按下 Finish 按鈕 65
程式專案的管理和維護 1. 解決程式專案出現的錯誤訊息 如果我們之前已經建立好程式專案而且也確定沒有錯誤, 可是不知何故突然在程式專案名稱的前面出現紅色打叉的符號, 此時有可能是專案載入時出錯 請讀者先在專案瀏覽視窗中點選該專案名稱, 然後從 Eclipse 上方的主選單中選擇 File > Refresh, 如果錯誤訊息還是存在, 就先關閉 Eclipse 再重新啟動即可 66
程式專案的管理和維護 2. Fix Project Property 錯誤訊息有時候專案的屬性也會出現錯誤, 這時候 Eclipse 會出現提示訊息要求執行 Fix project property 如果讀者看到這個訊息, 請在專案瀏覽視窗中用滑鼠右鍵點選該專案, 然後在彈出的選單中選擇 Android Toos > Fix Project Properties 就可以更正錯誤 67
程式專案的管理和維護 3. 刪除程式專案 如果要刪除某一個程式專案, 請在專案瀏覽視窗中用滑鼠右鍵點選該專案, 然後在彈出的選單中選擇 Delete, 在出現的對話盒中可以勾選連同檔案一併刪除, 這樣該專案在磁碟中的資料也會被刪除, 否則 Eclipse 只會從專案清單中刪除該專案, 往後讀者可以再利用 import 的方式重新將它載入 68
程式專案的管理和維護 4. 指定程式專案使用特定的手機模擬器 在 Eclipse 左邊的專案瀏覽視窗中用滑鼠右鍵點一下專案名稱, 在彈出的選單中選取 Run As > Run Configurations, 在對話盒的右邊點選 Target 標籤頁, 就可以看到目前手機模擬器 AVD 的清單, 請勾選想要的手機模擬器, 然後按下 Apply 按鈕再按下 Run 按鈕 69
單元 10 讓程式有美好的未來 - 良 好的程式架構 70
程式架構的重要 一個商業程式的程式碼規模少則數萬行, 多則上百萬行, 這類大型商業程式通常是由多人一起合作完成的 有些人負責操作介面的規劃和設計, 有些人負責程式碼的撰寫, 像這樣要能夠做到程式專案開發的分工就必須在程式的結構上做適當的安排 舉例來說, 如果操作介面的設計和修改都必須牽動到程式碼的改變, 那麼這二者的分工就會造成執行上的困難 商業程式通常會有不同語言的版本, 像是中文版 英文版 日文版 等, 這些不同語言的版本只是在操作介面的訊息文字使用不同的語言, 程式的運作和功能完全一樣, 因此如果我們能在程式的結構上把所有的訊息文字獨立出來, 避免摻雜在程式碼中, 就能夠很方便地修改成各種語言的版本 71
程式架構的重要 良好的程式架構是把整個程式專案區分成三個部分 : Model 負責執行程式的核心運算和判斷邏輯, 它透過 View 取得使用者輸入的資料, 然後視需要從資料庫查詢相關的資訊, 最後進行計算和判斷, 再將得到的結果交給 View 來顯示 View 定義程式的使用者操作介面, 程式操作介面的設計是一門專業的學問, 這些工作應該獨立出來交由專門負責的研發人員完成 Controller 負責控制程式的執行流程以及物件之間的互動 它就像是交響樂團的指揮一樣, 擔任整個系統的協調和控制的角色, 讓程式正常運作 在採用事件驅動的程式架構中, 它也負責事件的處理和回應 72
改進 婚姻建議 程式的架構 1. findviewbyid() 方法是用來取得宣告在介面佈局檔中的介面元件, 它是屬於 View 的程式碼, 而不是 Model 或 Controller 2. setonclicklistener() 是設定介面元件的事件處理程序, 它也是屬於 View 的程式碼 3. 有許多字串直接寫在程式碼中, 這樣會造成不同語言版本移植上的困難 73
改進 婚姻建議 程式的架構 1. 新增一個 setupviewcomponent() 方法負責執行 View 相關的所有程式碼, 包括取得介面佈局檔中的介面元件, 和設定介面元件的事件處理程序 2. 把寫在程式碼中的字串改成宣告在 res/values/strings.xml 資源檔中, 然後程式碼再從資源類別 R 中取得需要的字串 3. 在 res/layout/main.xml 介面佈局檔中我們也是把提示字串直接寫在介面元件的屬性中, 這樣也會造成不同語言程式版本移植上的困難, 因此我們同樣也把這些介面元件上的提示文字定義在 strings.xml 資源檔中, 然後再到資源類別 R 中取出字串使用 74
改進 婚姻建議 程式的架構 res/values/strings.xml: <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name"> 婚姻建議 </string> <string name="promptsex"> 性別 :</string> <string name="promptage"> 年齡 :</string> <string name="promptbtndosug"> 婚姻建議 </string> <string name="sugresult"> 結果 :</string> <string name="sugnothurry"> 還不急 </string> <string name="suggetmarried"> 趕快結婚!</string> <string name="sugfindcouple"> 開始找對象 </string> <string name="sexmale"> 結果 :</string> </resources> 75
改進 婚姻建議 程式的架構 res/layout/mail.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.andro id.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/promptsex" /> <EditText android:id="@+id/edtsex" android:layout_width="fill_parent" android:layout_height="wrap_content" android:inputtype="text" android:text="" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/promptage" /> <EditText android:id="@+id/edtage" android:layout_width="fill_parent" android:layout_height="wrap_content" android:inputtype="number" android:text="" /> </LinearLayout> 76
改進 婚姻建議 程式的架構 程式碼 : public class MarriSug extends Activity { /** Called when the activity is first created. */ @Override public void oncreate(bundle savedinstancestate) { setupviewcomponent(); } private void setupviewcomponent() { // 從資源類別 R 中取得介面元件 // 設定 button 元件的事件 listener } } private Button.OnClickListener btndosugonclick = new Button.OnClickListener() { public void onclick(view v) { String strsex = edtsex.gettext().tostring(); int iage = Integer.parseInt( edtage.gettext().tostring()); }; String strsug = getstring(r.string.sugresult); txtresult.settext(strsug); } 77
單元 11 查詢 Android SDK 的程式設 計說明文件 78
Android SDK 資料夾中的說明文件 用網頁瀏覽器開啟 android-sdk/docs/index.html 79
Android developers 網站上的說明文件 用網頁瀏覽器開啟 http://developer.android.com/index.html 80
使用 Reference 查詢類別說明文件 點選畫面上方的 Reference 標籤頁就會出現類別說明文件 81
使用 Reference 查詢類別說明文件 1. 如果是要查特定套件的資料, 請點選網頁左邊上方的 Package Index, 在下方就會出現所有套件的清單, 找到想要的套件後用滑鼠在套件名稱上點一下, 就會在下方的窗格中出現該套件的所有類別 找到想要的類別後用滑鼠點一下就會在右邊的窗格顯示該類別的詳細說明 2. 如果想要直接查詢特定的類別, 可以點選網頁左邊上方的 Class Index, 在右邊窗格的上方有 A 到 Z 的字母 請讀者依照類別名稱的第一個字母點選就會跳到該位置, 然後再往下找到想要查詢的類別, 最後點一下類別名稱就會出現該類別的說明文件 82
使用 Reference 查詢類別說明文件 3. 查詢特定類別的資料還有一個更快速的方法, 就是利用畫面右上方的 Search 按鈕 在該按鈕左邊的欄位輸入類別名稱, 輸入的同時在下方會出現參考清單, 出現你要查詢的類別後, 用滑鼠在該類別名稱上按一下就會切換到該類別的說明文件 83
使用 Dev Guide 查詢程式設計說明文件 Android SDK 資料夾中除了類別說明文件之外, 還有討論 Android 程式設計的技術文章, 點選 Android SDK 網頁上方的 Dev Guide 就會出現如下的網頁 84