Android筆記(8):訊息通知 Toast 及對話框 AlertDialog

Photo by Daniel Romero on Unsplash


在使用 APP 的過程中,常會用到訊息提醒或與使用者互動的對話方塊快顯視窗,在 Android 中,一般常用的是「Toast 訊息提示框」和具有選擇按鈕的「AlertDialog 對話框」兩種,本篇就來瞭解如何撰寫這兩種訊息提醒的程式。

[Toast 訊息提示框]

在程式開發過程中,程式設計師常會使用 Print 將訊息列出或顯示在畫面上,而手機/平板上就可以使用 Toast 來達成類似的功能,它會在畫面下方上彈出一個短暫訊息,待幾秒鐘後就消失在畫面上,通常拿來傳遞一些簡單的訊息,例如「密碼錯誤」、「您選擇了...」等。Toast 在螢幕上顯示訊息提示框,沒有控制按鈕,且經過一段時間後會自動消失。

使用 Toast 顯示訊息提示框很簡單,只需要 3 個操作步驟即可設定完成,先看一下程式內容:

(1) 建立一個 Toast 物件。通常有兩種方法:一是使用建構方法建立,另一是使用在 Toast 類的 makeText() 方法建立。以下為建立一個名稱為 toast 的 Toast 類別物件, this是應用程式的 Context
Toast toast = new Toast(this);  
(2) 調用 Toast 類提供的方法設置訊息提示的對齊方式、邊距以及顯示的內容等。再用 makeText()內的參數設定顯示內容及停留時間:
Toast toast = Toast.makeText(this, "顯示的內容", Time);
toast.setGravity(Gravity.xxxx,XOffset,YOffset);
上述的 Gravity.xxxx 是訊息顯示的位置,可設定為:Top(上方)、Bottom(下方)、Left(左方)、Right(右方)及Center(中央),CENTER 又可分成 CENTER_HORIZONAL 及 CENTER_VERTICAL 兩種),且可使用「|」連接多個屬性。XOffset, YOffset是偏移的位置量,當數字為負數表示向左或向上。Time可設定兩個參數:Toast.LENGTH_LONG (顯示3.5秒) 或 Toast.LENGTH_SHORT (顯示2秒)。
方法描述
setDuration(int duration)設定消息提示框持續的時間,有兩個參數可設定:
Toast.LENGTH_LONG (顯示3.5秒) 或 Toast.LENGTH_SHORT (顯示2秒)。
setGravity(int gravity,int xOffset,int yOffset)設定訊息提示框的位置,參數設定方法如上述。
setMargin(float horizontalMargin, float verticalMargin)設定訊息提示的邊距。
setText(CharSequence s)設定顯示的本文內容。
setView(View view)設定要顯示消息提示框的視圖。

(3) 調用 Toast 類的 show() 方法顯示消息提示框。一定要執行這個方法,才會顯示設定的消息提示框。
toast.show();
以下節錄部分程式,說明 Toast 的用法,程式判斷 msg 是否為空值,是的話建立 Toast 物件,直接寫一行完成顯示;若 msg 非空值,則先建立 Toast 物件,再使用 setGravity 將訊息置於螢幕中央,再用 show()的方法顯示訊息內容 。
if (msg.equals("")) {
     Toast toast = null;
     Toast.makeText(this, "請選擇您喜愛的運動項目", Toast.LENGTH_LONG).show();
} else {
     Toast toast = Toast.makeText(this, "您的運動愛好是:"+msg, Toast.LENGTH_LONG);
     toast.setGravity(Gravity.CENTER, 0, 0);
     toast.show();
}
執行的結果如下,左方沒有選擇項目,msg 字串為空值,出現訊息在螢幕下方。若有點選,訊息在螢幕中央。


[AlertDialog 對話框]

AlertDialog 類的功能非常強大,不僅可以建立帶按鈕的提示對話框,還可以建立顯示列表的對話方塊,這裡先瞭解帶按鈕的對話框如何製作與按鍵處理。在使用 AlertDialog 生成的對話框時,通常可分為 4 個區域,分別是:圖示區、標題區、內容區和按鈕區。

使用 AlertDialog 的對話框,按鈕的種類有三個:「確定」(setPositiveButton)、「忽略」(setNeutralButton)和「取消」(setNegativeButton),這三個按鈕是可隨程式設計師的需求自行增減的,並不是固定的。例如,不需要有「忽略」按鈕,也可以只建立帶有「確定」和「取消」按鈕的對話方塊。按鈕上的文字也可以自行定義,不一定要用這裡所表示的「確定」或「取消」。

AlertDialog 類別常用的方法如下:
方法描述
setTitle(CharSequence title)設定對話框標題。
setIcon(Drawable icon)使用 Drawable 資源為對話框設置圖示。
setMessage(CharSequence message)設定對話框內要顯示的內容。
setButton() 為提示對話框添加按鈕,可以是取消、忽略和確定按鈕。其參數值可以是:
DialogInterface.BUTTON_POSITIVE(確定)、BUTTON_ NEGATIVE(取消)
或 BUTTON_NEUTRAL(忽略)。

通常建立 AlertDialog 會使用其 AlertDialog.Builder 類別,其常用屬性及方法如下:
方法描述
setTitle(CharSequence title)設定對話框標題。
setIcon(Drawable icon) 使用 Drawable 資源為對話框設置圖示。
setIcon(int resId)使用資源 ID 所指的 Drawable 資源為對話框設置圖示。
setMessage(CharSequence message)設定對話框內要顯示的內容。
setNegativeButton(為對話框添加「取消」按鈕。
setPositiveButton()為對話框添加「確定」按鈕。
setNeutralButton()為對話框添加「忽略」按鈕。
setItems()為對話框添加列表項。
setSingleChoiceItems()為對話框添加單選列表項。
以下就來實作如何在 Android Studio 中建立 AlertDialog 提示視窗的具體步驟:
(1)新建一個模組 Module,進入 res/ layout 目錄下點選佈局檔 activity_main.xml。將預設的內容刪除,建立一個按鈕,如以下內容。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="30sp"
        android:onClick="btnClick"
        android:text="按我測試一下" />
</LinearLayout>
(2)在 MainActivity.java 的 onCreate() 方法內,先建立一個按鈕物件,用 findValueById 連結該元件,並為其添加事件監聽器,然後重寫的 onClick() 事件, 呼叫 AlertDialog 類別建立一個帶「取消」和「確定」按鈕的提示對話方塊,將其文字改成「否」及「是」,再使用 Toast 顯示按鍵結果,程式碼如下:
public class btn_MainActivity extends AppCompatActivity {
    Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_btn_main);

        btn = findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog.Builder dialog = new AlertDialog.Builder(btn_MainActivity.this);
                dialog.setIcon(android.R.mipmap.sym_def_app_icon);    // 取得小綠人圖示
                dialog.setTitle("確認視窗");
                dialog.setMessage("是否要結束應用程式?");
                dialog.setNegativeButton("否", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        Toast.makeText(btn_MainActivity.this, "繼續使用", Toast.LENGTH_LONG).show();
                    }
                });

                dialog.setPositiveButton("是", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        Toast.makeText(btn_MainActivity.this, "結束程式", Toast.LENGTH_LONG).show();
                    }
                });
                dialog.show();
            }
        });
    }
}

執行的結果如下,左方是訊息框,右方是按了「是」的結果。

[參考資料]


Post a Comment

較新的 較舊