Dialog有很多種型態,包含AlertDialog、ProgressDialog、DatePickerDialog、TimePickerDialog等,而本篇將介紹AlertDialog與ProgressDialog;DatePickerDialog、TimePickerDialog將於下一篇介紹。
AlertDialog除了可以用來顯示訊息,也可以用於要求使用者輸入資料,並且在這期間焦點會在AlertDialog對話框上,除非使用者將資料輸入完畢或手動關閉對話框。
<?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>
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常用於有下載或資料處理,為了避免使用者誤觸導致系統發生錯誤的情況。防止的方法主要透過設定setCancelable(false)方法,可以將焦點放在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基本上一樣,只是少了三個按鈕的設定。