Kotlin Android 高效入門
線上課程
  • Kotlin Android 高效入門
  • Android 開發準備
    • 0 Git 版本控制系統
      • 0.1 Gitlab 網站
      • 0.2 Gitlab 範例專案
      • 0.3 Gitlab 取得本書範例
      • 0.4 版本切換
    • 1 Android 系統與應用程式
      • 1.1 Android 版本演進
      • 1.2 Android 系統架構
      • 1.3 應用程式基礎
      • 1.4 應用程式元件
      • 1.5 應用程式宣告檔
      • 1.6 Android Studio 開發環境
    • 2 開發環境安裝
      • 2.1 基礎環境-JDK
      • 2.2 整合開發工具-Android Studio
      • 2.3 必要的設定
  • Android 專案開發
    • 3 Android 專案架構與 Activity
      • 3.1 建立Bmi專案
      • 3.2 AndroidManifest.xml載運清單
      • 3.3 畫面配置-Layout
      • 3.4 Java/Kotlin 類別
      • 3.5 資源 Resources
      • 3.6 Android Support Library-支援函式庫
    • 4 版面配置環境
      • 4.1 版面配置設計畫面
      • 4.2 ConstraintLayout 版面配置
      • 4.3 LinearLayout 流水式版面
      • 4.4 元件的高度與寬度
      • 4.5 元件位置與距離
    • 5 Kotlin 語言基礎
      • 5.1 Kotlin 基礎知識
      • 5.2 類別與物件
    • 6 Activity 設計
      • 6.1 Bmi 專案功能設計
      • 6.2 MainActivity 中取得畫面元件
      • 6.3 按鈕的事件處理
      • 6.4 使用浮動顯示-Toast類別
      • 6.5 使用對話框-AlertDialog 類別
      • 6.6 多國語言
      • 6.7 按鈕事件處理-匿名類別與 lambda
  • 線上課程
    • 20 線上課程 courses
Powered by GitBook
On this page
  • 元件的 onClick 屬性
  • 執行

Was this helpful?

  1. Android 專案開發
  2. 6 Activity 設計

6.3 按鈕的事件處理

Previous6.2 MainActivity 中取得畫面元件Next6.4 使用浮動顯示-Toast類別

Last updated 5 years ago

Was this helpful?

使用者與 APP 中的 UI 元件互動時,元件會產生各類型的事件 (Event), 例如點擊、長按、觸碰等事件,在 Android 中,這些事件由專門處理的「事件傾聽器(Event Listener)」負責監聽,最常見的是元件被按下事件的「View.OnClickListener」,它是在 View 類別內所設計的 Java 介面,宣告了一個方法:

void onClick(view : View)

所有實作 OnClickListener 的類別都須一併實作這個 onClick 方法, 先將 OnClickListener 指派到一個特定元件(如Button),未來,當Button被按下時, 會自動執行 OnClickListener 內的 onClick 方法。通常事件傾聽器會以「匿名類別(Anonymous Inner Class)」方式設計,匿名類別寫法會在本章後續介紹, 筆者先談的是使用元件的 onClick 屬性。

元件的 onClick 屬性

假設一個畫面中有很多個按鈕,每個按鈕都實作一個事件傾聽者去監聽事件是很繁複的工作,因此,Android 對於 Click 事件有特殊的對待,可以在元件屬性 onClick 設定一個方法名稱,再到 MainActivity 類別中設計一個同名的方法,方法規格如下:

fun 方法名稱(view: View)

接下來實作範例的 Bmi 運算按鈕的事件處理,在 activity_main.xml 的設計畫面中,選擇「Calculate BMI」按鈕,再到屬性區找到「onclick」屬性, 輸入「bmi」(方法名稱第一個字應為全小寫),如下圖:

輸入完成後再開啟 MainActivity.kt,新增一個 bmi 方法,類別的方法應在類別內的第一層新增,如下圖:

在輸入 View 類別時,未打完時會出現下拉選單,請使用選單完成 View 類別的輸入,Android Studio 會自動加入 import 語法。未來,當使用者按下此按鈕時,會自動執行 bmi 方法內的程式碼。

請儘量使用下拉選單完成類別的輸入,因為類別大都需要 import 語法,如果直接打完,import 語法不會自動產生。

在 bmi 方法中,設計以下程式碼以計算出 BMI 值,如下:

    fun bmi(view: View) {
        val weight = edWeight.text.toString().toFloat()
        val height = edHeight.text.toString().toFloat()
        val bmi = weight / (height*height)
        Log.d("MainActivity", "bmi: ${bmi}")
    }

程式碼的 2 與 3 行取得 EditText 的 text 屬性 (呼叫 getText() 方法) 取得一個 Editable 的 物件,再呼叫其 toString 方法取得目前輸入方塊中的字串,字串再呼叫 Kotlin 的 toFloat() 方法取得轉換後的浮點數,最後以體重 / 身高的平方公式算出 bmi 值。

最後的第 5 行,使用 android.util.Log 類別 (需要 import),將浮點數 bmi 放在字串中,顯示在系統記錄(LogCat),LogCat 是 Android 開發人員用來除錯的工具,可在執行時顯示資料並驗證程式的正確性。Log 類別提供了數個靜態方法,可供產生不同層級的記錄資料,例如代表除錯用的 d 方法(debug)、資訊的 i 方法 (info)、代表錯誤的 e 方法 (error) 等,以英文字的第一個字母為命名方式,可簡化程式碼的長度。這些方法使用上大致相同,以 d 除錯方法為例,規格如下:

Log.d(tag: String, message: String)

第一個參數代表標籤 Tag,為這個訊息設定一個可供辨認的標籤值,方便未來在 Log 視窗中找到訊息,第二個參數則是想顯示的字串訊息。

執行

程式完成到一個段落後,可以先啟動模擬器,在上方功能表區的 AVD Manager 圖示,如下圖:

或點擊功能表中的 Tools/AVD Manager

再按下 Actions 中的啟動圖示,如下圖:

接著按下 Android Studio 上方功能表列中的 Run 執行圖示,如下圖:

以上範例的執行結果如下,先輸入體重 66 與身高 1.7 測試:

按下畫面中的「CALCULATE BMI」按鈕後會自動去執行 MainActivity 內的 bmi 方法,計算後得到 bmi 值並在下方的 LogCat 視窗中 顯示,如下圖:

「LogCat」是由 Android 開發工具所提供,讓開發者能夠觀察系統產生的除錯資訊與記錄。當應用程式出錯拋出例外時,可利用 LogCat 找到出 錯的原因。

若資訊太多時,可在上方 Filter 篩選區打入如 MainActivity 的部份字 (如 Main),只顯示有 Main 字樣的記錄。使用 Log 類別可在開發時期提供資料確認、除錯的訊息,但無法將資訊提供給 APP 使用者,接下來將利用浮動顯示方式告知使用者運算出的 BMI 值的結果。