6.5 使用對話框-AlertDialog 類別

對話框是很常見的視覺元件,可用來提示、告知使用者必要的訊息, 主要由 Android 中的「android.app.AlertDialog」類別提供相關的功能。 除了內建的類別外,建議使用的則是支援函式庫提供的「android.support. v7.app.AlertDialog」類別,新版的 AndroidX 則是使用「androidx.appcompat.app.AlertDialog」。由於對話框的種類繁多,有無標題、圖示、訊息、 按鈕等各類需求,要提供如此繁複的建構子是有一定難度的,就算有,開發 人員光是要記住這麼多的建構子參數也是非常頭痛的,因此,AlertDialog 是 以「Builder」設計模式提供使用者產生合適的物件。

AlertDialog.Builder 類別

「AlertDialog.Builder」是一個公開的內部類別,它就如同一個「製造機」,先產生 AlertDialog.Builder 物件後,再呼叫 Builder 提供的方法配置 想要的功能與資訊,完成後再呼叫 show( ) 方法產生對話框並顯示在畫面上。

產生 Builder 物件時,建構子參數需要 Context 類別,可使用 this 關鍵字將 MainActivity 傳入,範例程式碼如下:

//產生Builder物件
val builder = AlertDialog.Builder(this)
//呼叫setMessage方法設定顯示文字
builder.setMessage("Hello")
//顯示對話框
builder.show()

上述的 builder 物件是為特定的對話框服務,對話框顯示完成後,其實 builder 物件不會再被使用。

簡化寫法

在開發時,對於不需要重複使用的物件,可使用匿名方式 (Anonymous) 建立 Builder 物件,設定完成後即顯示,而不需要為物件命名一個物件,使 用方式如下:

  AlertDialog.Builder(this)
      .setMessage("Your BMI is $bmi")
      .setTitle("BMI")
      .show()

上述程式碼的第 1 行產生一個 Builder 物件,接著馬上在第 2、3 行 呼叫設定對話框資訊的 setMessage 與 setTitle 方法設定內文與標題,使用 Kotlin 的變數可以用錢號 $ 放在字串中的特性,最後 4 行直接將已設定完成的對話框物件顯示在畫面上。

AlertDialog.Builder 的方法

常用的方法如下表:

■ create( ) : AlertDialog

依 Builder 目前配置產生一個對話框物件。

■ setIcon(int resId) : AlertDialog.Builder

設定圖示,使用 R.drawable.X 資源記錄。

■ setMessage(Charsequence text) : AlertDialog.Builder

設定對話框的內文字串。

■ setTitle(Charsequence text) : AlertDialog.Builder

設定對話框的標題字串。

■ show()

產生對話框物件並顯示在畫面中。

對話框按鈕

Android 的 AlertDialog 能夠配置按鈕,預設按鈕有三種,一為「正向按鈕 (Positive)」,例如確定 (OK)、是 (Yes),二為「中性按鈕 (Neutral)」,例如取消 (Cancel), 第三種為「否定按鈕 (Negative)」,例如否 (No)。設定這些按鈕的方法如下:

■ 正向按鈕方法為 setPositiveButton,使用如下:

當游標放在方法的括號內時,按下「Ctrl + P」(Mac 為「Command + P」) 可顯示方法的規格,可得知傳入參數的資料型態。

第一個參數為 String,代表按鈕中顯示的文字資料,第二個參數是當按 鈕被使用者按下時的傾聽器物件,上圖第 62 行中給的是 null 值,代表按下 OK 按鈕後不做任何事,會直接關閉對話框,執行結果對話框如下圖:

■ 中性按鈕方法為 setNeutralButton,使用如下:

        AlertDialog.Builder(this)
            .setMessage("Your BMI is $bmi")
            .setTitle("BMI")
            .setPositiveButton("OK", null)
            .setNeutralButton("Cancel", null)
            .show()

執行結果對話框如下圖:

各個版本的 Android 系統對於正向、中性、反向按鈕的排列方式會有不同,因此,針對按鈕的意義去使用合適的方法設定,讓 Android 系統決定按鈕應該的位置即可。

Last updated