iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0
Mobile Development

Android studio 30天新手筆記系列 第 7

Day7-Android新手筆記-AlertDialog與ProgressDialog

  • 分享至 

  • xImage
  •  

Dialog有很多種型態,包含AlertDialog、ProgressDialog、DatePickerDialog、TimePickerDialog等,而本篇將介紹AlertDialog與ProgressDialog;DatePickerDialog、TimePickerDialog將於下一篇介紹。
/images/emoticon/emoticon08.gif

AlertDialog

AlertDialog除了可以用來顯示訊息,也可以用於要求使用者輸入資料,並且在這期間焦點會在AlertDialog對話框上,除非使用者將資料輸入完畢或手動關閉對話框。

AlertDialog顯示效果

XML布局

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="100dp"
        android:text="Button"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

Java程式碼

public class MainActivity extends AppCompatActivity {
    Button button;
    AlertDialog.Builder alertDialog;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button1 = findViewById(R.id.button1);
        alertDialog = new AlertDialog.Builder(MainActivity.this);

        /** Dialog設定 **/
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //設定標題
                alertDialog.setTitle("顯示按鈕");
                //設定訊息
                alertDialog.setMessage("顯示所有按鈕");
                //設定是否可以點擊對話框之外來取消Dialog,true表示可以取消;false表示不行取消
                alertDialog.setCancelable(false);
                
                //右邊按鈕
                alertDialog.setPositiveButton("右邊", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        dialogInterface.dismiss();
                    }
                });
                //左邊按鈕
                alertDialog.setNeutralButton("左邊", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        dialogInterface.dismiss();
                    }
                });
                //中間按鈕
                alertDialog.setNegativeButton("中間", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        dialogInterface.dismiss();
                    }
                });
                
                alertDialog.show();
                
                //原本是Builder狀態要透過create轉成Dialog,在show出來
                //但是show()這個方法裡面會自動將Builder轉成Dialog,所以可以省略
                //需要特別注意這邊的show()是AlertDialog.Builder的,與AlertDialog的show不同
//                AlertDialog dialog = alertDialog.create();
//                dialog.show();
            }
        });

    }
}

接下來將解釋程式碼作用

        //設定標題
        alertDialog.setTitle("顯示按鈕");

        //設定訊息
        alertDialog.setMessage("顯示所有按鈕");

        //設定是否可以點擊對話框之外來取消Dialog,true表示可以取消;false表示不行取消
        alertDialog.setCancelable(false);

這邊分別設定AlertDialog的基礎屬性,標題、訊息與是否點擊對話框之外來取消,還有其他屬性可以設定,有興趣可以再深入研究。

        //右邊按鈕
        alertDialog.setPositiveButton("右邊", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                dialogInterface.dismiss();
            }
        });
        //左邊按鈕
        alertDialog.setNeutralButton("左邊", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                dialogInterface.dismiss();
            }
        });
        //中間按鈕
        alertDialog.setNegativeButton("中間", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                dialogInterface.dismiss();
            }
        });

這邊用於設定AlertDialog的按鈕,AlertDialog提供了三個固定位置的按鈕,範例將三個按鈕都寫出來,可以依照實際需求選擇。setPositiveButton表示設定右邊按鈕、setNeutralButton表示設定左邊按鈕、setNegativeButton表示設定中間按鈕。

    alertDialog.show();

這一行關係到你的AlertDialog是否能正常顯示,所以當你的AlertDialog沒有出現,請第一時間尋找它,因為我也常忘記。

    AlertDialog dialog = alertDialog.create();
    dialog.show();

你可能有注意到這兩行的存在,在這邊解釋一下:原本是Builder狀態要透過create()轉成Dialog,在show()出來,但是show()這個方法裡面會自動將Builder轉成Dialog,所以可以省略,需要特別注意這邊的show()是AlertDialog.Builder的,與AlertDialog的show()不同。

ProgressDialog

ProgressDialog常用於有下載或資料處理,為了避免使用者誤觸導致系統發生錯誤的情況。防止的方法主要透過設定setCancelable(false)方法,可以將焦點放在ProgressDialog,直到工作結束時,將ProgressDialog關閉,期間點擊ProgressDialog之外將不會有反應。

ProgressDialog顯示效果

public class MainActivity extends AppCompatActivity {
    ProgressDialog progressDialog;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        progressDialog = new ProgressDialog(this);
        //設定標題
        progressDialog.setTitle("工作執行");
        //設定訊息
        progressDialog.setMessage("更新資料中...");
        //設定是否可以點擊對話框之外來取消ProgressDialog,true表示可以取消;false表示不行取消
        progressDialog.setCancelable(false);
        //顯示ProgressDialog對話框
        progressDialog.show();
    }
}

接下來將解釋程式碼作用

        progressDialog = new ProgressDialog(this);
        //設定標題
        progressDialog.setTitle("工作執行");
        //設定訊息
        progressDialog.setMessage("更新資料中...");
        //設定是否可以點擊對話框之外來取消ProgressDialog,true表示可以取消;false表示不行取消
        progressDialog.setCancelable(false);
        //顯示ProgressDialog對話框
        progressDialog.show();

這邊分別設定progressDialog的基礎屬性,標題、訊息與是否點擊對話框之外來取消,還有其他屬性可以設定,有興趣可以再深入研究。設定與AlertDialog基本上一樣,只是少了三個按鈕的設定。

/images/emoticon/emoticon41.gif


上一篇
Day6-Android新手筆記-Snackbar與Toast基本介紹
下一篇
Day8-Android新手筆記-Calendar+Dialog+DatePicker+TimePicker(日期與時間選擇
系列文
Android studio 30天新手筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言