1、5-1 活動類別的基礎活動類別的基礎 n 5-1-1 Context抽象類別 n 5-1-2 Activity活動類別 5-1-1 Context抽象類別抽象類別-類別架構類別架構n Android應用程式是由活動、服務、內容提供者和廣播接收器四大元件組成,它們都是在同一個應用程式的Context物件中執行,即上一節Activity元件所在的方框。n Context類別是一個抽象類別,其類別架構如下圖所示:5-1-1 Context抽象類別抽象類別-取得取得Context物件物件n 在目前Activity活動類別可以使用getBaseContext()方法(此為繼承自ContextWrappe
2、r類別的方法)取得Context物件,如下所示:Context context=getBaseContext();n 因為Activity類別是繼承Context抽象類別的子類別,所以在繼承Activity的類別也可以直接使用this取得此活動的Context物件。5-1-1 Context抽象類別抽象類別-應用程式層級的操作應用程式層級的操作n 啟動活動、服務和註冊廣播接收器:使用startActivity()方法啟動其他活動、startService()方法啟動服務和registerReceiver()方法註冊廣播接收器。n 取得應用程式資源:使用getResources()方法取得資源,
3、例如:字串資源的字串內容,即在strings.xml定義的值。n 存取偏好設定:使用getSharedPreferences()方法存取應用程式的偏好設定,例如:遊戲的設定和最高分等。n 請求系統服務:使用getSystemService()方法請求系統服務,例如:定位服務。n 管理應用程式的檔案與資料庫:使用openFileInput()和openFileOutput()方法建立讀取和寫入檔案,openorCreateDatabase()方法建立資料庫。5-1-2 Activity活動類別活動類別-類別架構類別架構n Activity活動類別是Android應用程式的核心,使用者唯一注意到的
4、元件,因為大部分活動都會與使用者互動,我們建立Android應用程式大都是在定義和實作每一個螢幕畫面的活動類別。n Activity類別架構如下圖所示:5-1-3 Activity活動類別活動類別 FragmentActivity和和AppCompatActivity子類別子類別n 在Activity類別之下是FragmentActivity和AppCompatActivity子類別(這2個是支援特定功能的Activity活動類別)屬於支援函數庫(Support Library)的基礎活動類別,其主要目的是為了相容舊版Android作業系統,讓舊版一樣可以支援新版增加的功能,如下所示:Frag
5、mentActivity:使用Fragment片段的活動基礎類別,可以在執行API 4以上的Android作業系統新增Fragment片段。如果活動需要使用Fragment片段,就是繼承此活動類別。AppCompatActivity:預設擁有動作列(ActionBar)的活動基礎類別,可以在執行API 7以上的Android作業系統新增位在螢幕上方的工具列,如果活動需要顯示上方工具列,就是繼承此活動類別。5-1-3 Activity活動類別活動類別-新增活動新增活動n 在Android應用程式新增活動就是建立Activity類別,因為Activity類別只是一個空視窗的原型,我們需要繼承Act
6、ivity類別來擴充視窗的功能,例如:在支援動作列的活動新增使用介面,如下所示:public class MainActivity extends AppCompatActivity /覆寫相關方法 5-1-3 Activity活動類別活動類別-啟動活動啟動活動n Android應用程式有多種方法來啟動活動,其簡單說明如下所示:在Manifest檔宣告Android應用程式第一個進入的活動(相當於程式的進入點,即Java語言的main()主程式)。使用覆寫ContentWrapper物件的startActivity()方法啟動活動。使用Activity物件的startActivityForRe
7、sult()方法啟動活動。5-1-3 Activity活動類別活動類別 在在Android應用程式宣告活動應用程式宣告活動(內容內容)n 在AndroidManifest.xml檔案的application子元素可以宣告應用程式擁有的活動,例如:第2章Ch2_3專案的AndroidManifest.xml檔案,XML標籤application元素的內容,如下所示:5-1-3 Activity活動類別活動類別 在在Android應用程式宣告活動應用程式宣告活動(說明說明)n activity子元素宣告應用程式擁有的活動,在intent-filter子元素定義此活動需要回應哪些操作或動作,2個子元
8、素的簡單說明,如下所示:action元素:屬性值android.intent.action.MAIN表示此活動是Android應用程式的進入點,也就是說,當使用者執行此應用程式,回應的操作就是執行此活動。category元素:屬性值android.intent.category.LAUNCHER表示將程式置於啟動器的安裝程式清單中,我們可以在清單中看到安裝的程式圖示。啟動與關閉活動啟動與關閉活動n 啟動:startActivity(intent)n 啟動(須回傳結果):startActivityForResult(intent,int)n 關閉:finish()11處理介面相關方法處理介面相關
9、方法n 依資源索引值顯示介面:setContentView(int)n 在活動顯示參數之介面setContentView(view)n 依資源索引值尋找介面:findViewById(int)125-2 活動的生命周期活動的生命周期 n 5-2-1 活動堆疊 n 5-2-2 活動的生命周期 n 5-2-3 管理活動的狀態5-2-1 活動堆疊活動堆疊n 對於在Android作業系統啟動中的眾多活動來說,系統是使用一個活動堆疊(Activity Stack)來管理這些活動。如同餐廳廚房的工人清洗餐盤,將洗好的餐盤疊在一起,每一個洗好的餐盤放在這疊餐盤的頂端,如下圖所示:5-2-2 活動的生命周期活
10、動的生命周期 圖例圖例n 活動的生命周期簡單的說就是活動的狀態管理,屬於活動管理員(Activity Manager)的主要工作,它負責建立、釋放和管理眾多的活動。對於活動的生命周期來說,我們重視的是不同狀態之間的轉換,而不是目前位在哪一個狀態,如下圖所示:5-2-2 活動的生命周期活動的生命周期 啟動狀態啟動狀態啟動狀態n 當Android應用程式不在記憶體中時,執行程式就是進入啟動狀態,在依序呼叫onCreate()、onStart()和onResume()方法後,就進入執行狀態。5-2-2 活動的生命周期活動的生命周期 執行狀態執行狀態執行狀態n 活動位在執行狀態表示它目前在螢幕上顯示且
11、與使用者進行互動,對比Windows作業系統,就是視窗取得焦點(Focus),Android作業系統在任何時間都只會有一個位在執行狀態的活動。n 一般來說,執行狀態的活動擁有最高權限使用記憶體與資源來提昇程式的執行效率,以便更快回應使用者的操作。5-2-2 活動的生命周期活動的生命周期 暫停狀態暫停狀態暫停狀態n 暫停狀態是指活動沒有取得焦點,沒有與使用者互動,但是仍然顯示在螢幕上,這並非活動的正常情況,通常是因為顯示對話方塊,對話方塊不會佔用整個螢幕,所以背後的活動仍然看的見,此時就會呼叫onPause()方法,從執行狀態轉換至暫停狀態。n 暫停狀態的活動仍然擁有最高的權限,因為它隨時都會呼
12、叫onResume()方法回到執行狀態。5-2-2 活動的生命周期活動的生命周期 停止狀態停止狀態停止狀態n 停止狀態的活動仍然保留在記憶體之中,只是使用者看不到它。Android作業系統之所以將活動保留在記憶體,因為使用者有可能不久就會再返回此活動,而且從停止狀態回到執行狀態,比起從啟動狀態轉換至執行狀態耗費較少的資源。5-2-2 活動的生命周期活動的生命周期 移除狀態移除狀態移除狀態n 移除狀態的活動表示已經釋放活動佔用的資源,活動已經刪除且不存在記憶體之中。活動管理員會依據記憶體的使用情況,決定活動是否需要刪除,以便空出更多記憶體空間來讓執行狀態的活動能夠正常的運作。5-2-3 管理活動
13、的狀態管理活動的狀態-管理活動的狀態管理活動的狀態n 在活動整個生命周期中共有7個回撥方法會在活動的狀態轉換時呼叫,這些方法就是開發者回應狀態改變,撰寫所需Java程式碼的地方,如下圖所示:5-2-3 管理活動的狀態管理活動的狀態-回撥方法回撥方法n 按 AltEnter可開啟匯入事件方法之視窗-選Import class 匯入 Log類別n 插入事件方法:開啟 Java程式檔,游標移在適當處,然後點擊Code/Override Methods-開啟Select Methods to Override/Implement視窗235-2-3 管理活動的狀態管理活動的狀態-onCreate()回撥
14、方法回撥方法n 在活動類別的7個回撥方法之中,只有onCreate()方法有參數,筆者準備使用此方法為例來進一步說明回撥方法的基本架構,如下所示:public void onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.main);5-2-3 管理活動的狀態管理活動的狀態-匯入匯入Android SDK套件套件n 當在Java程式使用Android SDK現成的API類別時,我們需要匯入所屬套件的類別完整名稱,以本節MainActivity.java為例,在
15、程式開頭需要匯入3個類別,如下所示:import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;n 上述程式碼使用import關鍵字匯入指定類別,這些是Android API提供的類別,一些馬上可以使用的現成類別,其說明如下所示:匯入第1個類別:因為類別繼承AppCompatActivity類別。匯入第2個類別:因為onCreate()方法的參數是Bundle物件。匯入第3個類別:因為使用Log類別方法顯示訊息。5-3 活動的佈景與方向活動的佈景與方向n 5-3
16、-1 更改活動使用的佈景n 5-3-2 鎖定活動方向n 5-3-3 切換鎖定活動的方向5-3-1 更改活動使用的佈景更改活動使用的佈景 說明說明n Android應用程式的活動視窗外觀預設是使用系統佈景,動作列是位在螢幕最上方,我們可以使用佈景(Theme)更改視窗屬性,佈景是一種外觀樣式,可以套用在整個Android應用程式或特定的活動來更改外觀。5-3-1 更改活動使用的佈景更改活動使用的佈景 在在AndroidManifest.xml檔案套用佈景檔案套用佈景1n 在AndroidManifest.xml檔案的標籤,可以使用android:theme屬性來套用佈景,如下所示:.5-3-1
17、更改活動使用的佈景更改活動使用的佈景 在在AndroidManifest.xml檔案套用佈景檔案套用佈景2n style/AppTheme屬性值是參考res/valuse下的styles.xml樣式檔的資源,如下所示:color/colorPrimary color/colorPrimaryDark color/colorAccent5-3-1 更改活動使用的佈景更改活動使用的佈景 使用使用Android平台的內建佈景平台的內建佈景1n 在Android平台提供兩種基礎的活動佈景,擁有預設佈景色彩的配色,如下表所示:5-3-1 更改活動使用的佈景更改活動使用的佈景 使用使用Android平台的
18、內建佈景平台的內建佈景2n 不只如此,在平台佈景之後可以加上樣式常數是指定細部樣式,如下表所示:5-3-1 更改活動使用的佈景更改活動使用的佈景 範例範例n 例如:Android Studio專案的預設值是淡色系的佈景配色加上深色系的工具列,如下所示:Theme.AppCompat.Light.DarkActionBarn Android Studio專案Ch5_3_1的styles.xml樣式檔已經更改套用的佈景,如下所示:.5-3-2 鎖定活動方向鎖定活動方向-說明說明n 對於一些Android遊戲程式來說,我們可能需要鎖定活動方向為橫向(Landscape),以方便遊戲進行;某些程式需要
19、鎖定成直向(Portrait),我們可以在AndroidManifest.xml檔案的標籤新增android:screenOrientation屬性,屬性值portrait是直向;landscape是橫向,如下所示:5-3-2 鎖定活動方向鎖定活動方向-圖例圖例n Android Studio專案Ch5_3_2只是在AndroidManifest.xml檔案加上android:screenOrientation屬性值landscape,執行結果可以看到活動鎖定成橫向,如右圖所示:5-3-3 切換鎖定活動的方向切換鎖定活動的方向-說明說明n Android應用程式有時可能需要切換鎖定活動的方向,
20、我們可以新增Button元件來切換活動方向。在Android是呼叫Activity類別的setRequestedOrientation()方法來鎖定活動方向,如下所示:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);n 上述程式碼切換鎖定方向成直向,參數是整數常數值(即android.content.pm.ActivityInfo類別常數)。切換鎖定成橫向只是參數值不同,如下所示:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
21、;5-3-3 切換鎖定活動的方向切換鎖定活動的方向-圖例圖例n Android Studio專案Ch5_3_3新增2個Button元件,按第1個按鈕執行button_Click()鎖定直向;第2個執行button2_Click()鎖定橫向,其執行結果如下圖所示:5-4 版面配置版面配置 n 5-4-1 版面配置的基礎 n 5-4-2 RelativeLayout版面配置 n 5-4-3 LinearLayout版面配置 n 5-4-4 TableLayout版面配置n 5-4-5 FrameLayout與ScrollView版面配置 5-4-1 版面配置的基礎版面配置的基礎 說明說明n 版面配
22、置是android.widget套件的類別,一些看不見的容器物件(ViewGroup物件),可以用來群組與編排介面元件(View物件,也屬於android.widget套件),如下圖所示:5-4-1 版面配置的基礎版面配置的基礎 ViewGroup版面配置版面配置n LinearLayout類別:其包含的子介面元件是一個接著一個排列成水平或垂直一條直線,即標籤。n RelativeLayout類別:子介面元件是相對其他子介面元件,或貼齊父版面配置的邊線,我們可以指定一個介面元件位在另一個介面元件的上方、下方、左邊或右邊等相對位置,即標籤。n FrameLayout類別:如同堆疊來編排多個子介面
23、元件,所有子元件都位在左上角同一位置,每一個元件如同是一頁圖層,即標籤。n TableLayout類別:使用表格欄與列來編排子介面元件,每一個介面元件是新增至表格每一列的TableRow物件,即和標籤。5-4-1 版面配置的基礎版面配置的基礎 在活動類別顯示版面配置在活動類別顯示版面配置n 在活動類別onCreate()方法只需加上一行Java程式碼,就可以在行動裝置的螢幕,載入和顯示版面配置資源的使用介面,如下所示:setContentView(R.layout.activity_main);n 上述程式碼使用Activity物件的setContentView()方法顯示參數的版面配置資源,
24、參數是R.java檔案的資源索引(請參閱第2-5-3節的說明),這是一個位在專案reslayoutactivity_main.xml目錄的XML檔。5-4-2 RelativeLayout版面配置版面配置 說明說明n RelativeLayout版面配置是Android Studio預設使用的版面配置,因為【Design】標籤並不能刪除根元件,如果需要使用其他版面配置,我們只能切換至【Text】標籤,自行輸入XML標籤碼來更改成其他版面配置。n RelativeLayout版面配置可以指定各子介面元件之間的相對位置,例如:TextView元件是位在Button元件的左邊、貼齊父元件的上、下、左
25、和右邊線,或正中、水平正中或垂直正中等。n 因為第2-3節和第5-4-2節已經使用此版面配置來新增和編排介面元件,這一節筆者說明的是RelativeLayout版面配置的標籤和屬性,這些就是在新增元件時上方顯示的編排資訊。5-4-2 RelativeLayout版面配置版面配置 版面配置檔的版面配置檔的XML標籤標籤n 在版面配置資源的XML文件是使用RelativeLayout元素來包含子元素,如下所示:.屬性值見P5-27/285-4-2 RelativeLayout版面配置版面配置 android:id屬性屬性n 在RelativeLayout需要指定介面元件位在哪一個元件的左邊、右邊或
26、下方時,我們需要指定元件的android:id屬性,例如:TextView元件的android:id屬性,如下所示:n id屬性值是以+id開頭,表示新增/符號之後的識別名稱textView,在Button元件的標籤屬性,可以使用+id/textView參考此元件(也可以不加上+號),如下所示:android:layout_below=+id/textView5-4-3 LinearLayout版面配置版面配置 說明說明n LinearLayout版面配置是將子介面元件排列成一列(垂直),或一欄(水平),一個接著一個排列成一直線,如下圖所示:5-4-3 LinearLayout版面配置版面配置
27、 標籤標籤n 在版面配置資源的XML文件是使用LinearLayout元素來包含子元素的View元件,如下所示:.n 在Android Studio新增LinearLayout元件時,第一層layout_width和layout_height屬性的預設值都是fill_parent;第2層是match_parent和wrap_content。屬性值見305-4-3 LinearLayout版面配置版面配置 圖例圖例5-4-4 TableLayout版面配置版面配置 說明說明n TableLayout版面配置使用表格的欄與列來編排子介面元件,每一個介面元件是新增至表格的每一列,即TableRow物
28、件,如下圖所示:5-4-4 TableLayout版面配置版面配置 標籤標籤n 在版面配置資源的XML文件是使用TableLayout元素來包含子元素,如下所示:.n 在上述TableLayout元素之中使用TableRow元素定義每一列的介面元件。5-4-4 TableLayout版面配置版面配置 圖例圖例可直接拖拉元件至此5-4-5 FrameLayout與與ScrollView版面配置版面配置-FrameLayout版面配置版面配置n FrameLayout版面配置這個容器只能顯示單一介面元件,所有子元件都是位在左上角的同一個位置,每一個元件如同一頁圖層疊在一起。n FrameLayou
29、t版面配置資源的XML文件是使用FrameLayout元素來包含子元素,如下所示:.5-4-5 FrameLayout與與ScrollView版面配置版面配置-ScrollView版面配置版面配置n ScrollView是一種特殊版本的FrameLayout,可以捲動顯示之中的介面元件,其內容是一個介面元件或版面配置元件,通常是搭配LinearLayout版面配置。n ScrollView版面配置資源的XML文件是使用ScrollView元素來包含子元素,如下所示:.5-5 ConstraintLayout版面配置版面配置 n 5-5-1 ConstraintLayout版面配置的基本使用n
30、5-5-2 使用ConstraintLayout版面配置編排元件5-5 ConstraintLayout版面配置版面配置n ConstraintLayout版面配置是RelativeLayout的進階版本,一套功能強大、簡單、快速和有彈性的版面配置系統,可以幫助我們建立出反應式使用介面(Responsive User Interface),能夠自動調整和產生適用在不同螢幕尺寸的使用介面。n Android Studio在2.2.x版大幅更新Design設計編輯器,其主要目的就是為了支援ConstraintLayout版面配置,在Android SDK是以支援函數庫方式提供ConstraintL
31、ayout,向下相容支援API Level 9(Gingerbread)以上版本。5-5-1 ConstraintLayout版面配置的基本使用版面配置的基本使用-建立建立ConstraintLayout版面配置版面配置(Step 1-2)Step 1:請使用【Empty Activity】範本新增Android Studio專案Ch5_5後,開啟activity_main.xml檔案且切換至【Design】標籤。Step 2:在Component Tree視窗的RelativeLayout根元素上,執行【右】鍵快顯功能表的【Convert RelativeLayout to Constrai
32、ntLayout】命令。5-5-1 ConstraintLayout版面配置的基本使用版面配置的基本使用-建立建立ConstraintLayout版面配置版面配置(Step 3-4)Step 3:不用更改選項,按【OK】鈕,可以看到一個訊息視窗。Step 4:訊息指出需要加入支援函數庫,請按【OK】鈕,稍等一下,可以將版面配置改為ConstraintLayout。5-5-1 ConstraintLayout版面配置的基本使用版面配置的基本使用-認識認識ConstraintLayout版面配置版面配置(說明說明)n 基本上,在ConstraintLayout新增元件和RelativeLayout
33、並沒有什麼不同,當新增元件後,我們需要新增元件的限制(Constraints)來編排元件,這是一組規則用來描述元件和相關元件之間的對齊與距離,也可能是元件和ConstraintLayout版面配置的邊界之間的對齊與距離,或自行新增的準則線(Guidelines)。n 而且,為了讓ConstraintLayout版面配置引擎能夠在使用介面標示出元件的位置,一個元件必須有足夠讓引擎定位的限制連接線(Constraint Connections),這是一條或多條連接元件上下左右和邊界或其他元件之間的連接線,可以標示出元件相對於邊界或其他元件之間的相對或絕對位置。5-5-1 ConstraintLay
34、out版面配置的基本使用版面配置的基本使用-認識認識ConstraintLayout版面配置版面配置(範例範例)n 例如:在Button元件新增4條限制連接線來連接四個方向ConstraintLayout版面配置的邊界,分別距離左右邊界35%和65%;上下邊界15%和85%(也可以使用固定距離),如下圖所示:n 4條限制連接線可以讓ConstraintLayout版面配置引擎在旋轉螢幕(從圖左轉成圖右)後,自動調整Button元件位置來維持上下左右的比例,讓ConstraintLayout編排的元件可以適用在不同的螢幕尺寸。5-5-1 ConstraintLayout版面配置的基本使用版面配置
35、的基本使用-認識認識ConstraintLayout版面配置版面配置(工具列工具列)n 當版面配置使用ConstraintLayout,在Design設計編輯器上方工具列就會新增多個按鈕來處理限制、間距和對齊等,如下圖所示:5-5-1 ConstraintLayout版面配置的基本使用版面配置的基本使用-認識認識ConstraintLayout版面配置版面配置(工具列說明工具列說明)n 顯示限制(Show Constraints):在設計與藍圖檢視顯示我們在元件新增的限制連接線。n 自動模式(Autoconnect Mode):此按鈕是用來切換使用自動模式,預設沒有使用,如果開啟自動模式,當我
36、們新增元件後,就會自動使用演算法依據元件位置,在邊界和附近元件之間建立限制連接線,沒有開啟是手動模式,我們需要自行建立元件之間的限制連接線。n 刪除所有限制(Clear All Constraints):清除所有在元件之間新增的限制連接線。n 推論限制(Infer Constraints):當關閉自動模式,手動新增元件且沒有新增任何限制連接線時,我們可以按此按鈕,使用嘗試錯誤演算法來自動幫我們建立出元件的限制連接線。5-5-2 使用使用ConstraintLayout版面配置編排元件版面配置編排元件-使用自動連接使用自動連接n 請先刪除預設的TextView元件,然後點選上方工具列按鈕圖示開啟
37、自動連接,就可以在ConstraintLayout版面配置新增拖拉Button元件至使用介面的正中央,同時看到Button元件四周自動建立的限制連接線(百分比都是50%),如右圖所示:5-5-2 使用使用ConstraintLayout版面配置編排元件版面配置編排元件-使用自動連接使用自動連接n 因為已經新增編排置中的Button元件,當在正上方再新增一個Button元件時,可以看到自動建立左右的限制連接線,並且顯示與下方Button元件之間的間距是56,這是固定距離的限制連接線,如下圖所示:5-5-2 使用使用ConstraintLayout版面配置編排元件版面配置編排元件-新增限制連接線新
38、增限制連接線(圖示說明圖示說明)n Design設計編輯器除了使用自動連接來新增元件的限制連接線外,我們也可以手動新增限制連接線。在新增前,我們先來看一看元件周圍的連接線、小方形和圓形圖示的意義和用途,如下圖所示:5-5-2 使用使用ConstraintLayout版面配置編排元件版面配置編排元件-新增限制連接線新增限制連接線n 當元件四周的小圓形是空心時,我們可以手動新增限制連接線,例如:Button元件的右邊是空心圓形,當游標移至上方時,可以顯示訊息文字指出可以拖拉來建立右方的限制連接線,如下圖所示:5-5-2 使用使用ConstraintLayout版面配置編排元件版面配置編排元件-刪除
39、限制連接線刪除限制連接線n 如果元件四周已經有限制連接線,請點選中間實心圓來刪除限制連接線(下圖左),如下圖所示:5-5-2 使用使用ConstraintLayout版面配置編排元件版面配置編排元件-屬性視窗的檢測面板屬性視窗的檢測面板n 當我們在元件新增限制連接線後,在屬性視窗提供有檢測面板(Inspector Pane),可以幫助我們進一步調整限制偏心、間距和元件尺寸,如下圖所示:5-5-2 使用使用ConstraintLayout版面配置編排元件版面配置編排元件-新增準則線(新增準則線(Guidelines)n 請在Design設計編輯器的設計或藍圖檢視上,執行【右】鍵快顯功能表的【Ad
40、d Vertical Guideline】命令,就可以新增垂直準則線;【Add Horizontal Guideline】命令是新增水平準則線,如下圖所示:5-6 Toast與與Log類別類別 n 5-6-1 Toast類別n 5-6-2 偵錯與Log類別5-6-1 Toast類別類別n Toast類別屬於android.widget套件,提供相關類別方法可以在行動裝置顯示一個彈跳訊息框,我們可以在此訊息框顯示一段訊息文字,而且只會保留一段時間。n 例如:修改第2-3節的專案,按下按鈕後,使用Toast類別的makeText()類別方法建立一段訊息,如下所示:Toast.makeText(th
41、is,大家好!,Toast.LENGTH_SHORT).show();5-6-2 偵錯與偵錯與Log類別類別 方法方法n Android提供android.util套件的Log類別,可以建立記錄訊息,幫助我們進行程式偵錯。Log類別常用的類別方法,如下表所示:5-6-2 偵錯與偵錯與Log類別類別 範例範例n 在第5-2-3節我們已經使用Log.d()方法來顯示呼叫各活動方法的訊息,如下所示:Log.d(TAG,ActivityCh5_2_3:onCreate);n 方法有2個參數,第1個參數是標籤,可以用來識別是誰產生此訊息,第2個參數是訊息內容。一般來說,我們會使用一個類別常數來指定第1個參數,如下所示:private static final String TAG=Ch5_2_3;