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 物件是為特定的對話框服務,對話框顯示完成後,其實 builder 物件不會再被使用。
簡化寫法
在開發時,對於不需要重複使用的物件,可使用匿名方式 (Anonymous) 建立 Builder 物件,設定完成後即顯示,而不需要為物件命名一個物件,使 用方式如下:
上述程式碼的第 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,使用如下:
執行結果對話框如下圖:
各個版本的 Android 系統對於正向、中性、反向按鈕的排列方式會有不同,因此,針對按鈕的意義去使用合適的方法設定,讓 Android 系統決定按鈕應該的位置即可。
Last updated