AlertDialog對話框用於提示一些重要信息或者顯示一些需要用戶額外交互的內容。它一般以小窗口的形式展示在界面上。使用AlertDialog創建的對話框一般包含標題、內容和按鈕三個區域。
創建AlertDialog對話框步驟:
- 調用AlertDialog的靜態內部類Builder創建AlertDialog.Builder的對象。
- 調用AlertDialog.Builder的setTitle()和setIcon()方法分別設置AlertDialog對話框的標題名稱和圖標。
- 調用AlertDialog.Builder的setMessage()、setSingleChoiceItems()或者setMultiChoiceItems()方法設置AlertDialog對話框的內容爲簡單文本、單選列表或者爲多選列表。
- 調用AlertDialog.Builder的setPositiveButton()和setNegativeButton()方法設置AlertDialog對話框的確定和取消按鈕。
- 調用AlertDialog.Builder的create()方法創建AlertDialog對象。
- 調用AlertDialog對象的show()方法顯示該對話框。
- 調用AlertDialog對象的dismiss()方法取消該對話框。
案例一:普通對話框
package com.example.commondialog;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.content.DialogInterface;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public void onBackPressed() {
AlertDialog dialog;
AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setIcon(R.mipmap.ic_launcher)
.setTitle("普通對話框")
.setMessage("是否退出應用?")
.setPositiveButton("確定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int i) { //注意這個dialog是形參,不是上面的私有變量dialog
dialog.dismiss();
MainActivity.this.finish();
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int i) {
dialog.dismiss();
}
});
dialog = builder.create();
dialog.show();
}
}
運行結果:
案例二:單選對話框
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical">
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="單選對話框"
android:layout_marginTop="10dp"
android:textSize="20sp"
android:textColor="#FFDB37"
/>
<Button
android:id="@+id/bt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="設置字體大小"
android:layout_marginTop="20dp"
android:layout_gravity="center"/>
</LinearLayout>
MainActivty.java
package com.example.singlechoicedialog;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private TextView textView;
private int[] textSizeArr = {10,20,25,30,40};
int textSize = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.bt).setOnClickListener(this);
textView =(TextView) findViewById(R.id.tv);
}
@Override
public void onClick(View view) {
final AlertDialog dialog;
AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setTitle("設置字體大小")
.setIcon(R.mipmap.ic_launcher)
.setSingleChoiceItems(new String[]{"小號", "默認", "中號", "大號", "超大"},
textSize, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
textSize = i;
}
})
.setPositiveButton("確定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int i) {
textView.setTextSize(textSizeArr[textSize]);
dialog.dismiss();
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int i) {
dialog.dismiss();
}
});
dialog = builder.create();
dialog.show();
}
}
運行結果:
案例三:多選對話框
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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">
<Button
android:id="@+id/bt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="開啓興趣愛好小調查">
</Button>
</LinearLayout>
MainActivity.java
package com.example.multichoicedialog;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private CharSequence[] items = new CharSequence[]{"旅遊","美食","看電影","運動"};
private boolean[] checkedItems = new boolean[]{false,true,false,false};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.bt).setOnClickListener(this);
}
@Override
public void onClick(View view) {
final AlertDialog dialog;
AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setTitle("請添加興趣愛好")
.setIcon(R.mipmap.ic_launcher)
.setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i, boolean b) {
checkedItems[i] = b;
}
})
.setPositiveButton("確定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int which) {
StringBuffer stringBuffer = new StringBuffer();
for(int i =0;i<=checkedItems.length-1;i++){
if(checkedItems[i]){
stringBuffer.append(items[i]).append(" ");
}
}
if(stringBuffer != null){
Toast.makeText(MainActivity.this,
""+stringBuffer,Toast.LENGTH_SHORT).show();
}
dialogInterface.dismiss();
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
}
});
dialog = builder.create();
dialog.show();
}
}
運行結果:
案例四:自定義對話框
custom_dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="16dp"
android:orientation="vertical">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:visibility="visible"
android:textColor="#333333"
android:textSize="18sp"
android:layout_marginBottom="16dp"/>
<TextView
android:id="@+id/message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:textSize="14sp"
android:textColor="#999999"/>
<View
android:layout_width="match_parent"
android:layout_height="2px"
android:layout_marginTop="16dp"
android:background="#E8E8E8"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/negtive"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:paddingTop="16dp"
android:paddingBottom="16dp"
android:layout_weight="1"
android:background="@null"
android:layout_gravity="center"
android:singleLine="true"
android:textColor="#999999"
android:textSize="16sp"/>
<View
android:id="@+id/colum_line"
android:layout_width="2px"
android:layout_height="match_parent"
android:background="#E8E8E8"/>
<Button
android:id="@+id/positive"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_marginRight="10dp"
android:paddingTop="16dp"
android:paddingBottom="16dp"
android:background="@null"
android:gravity="center"
android:textColor="#38ADFF"
android:textSize="16sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
CommonDialog.java
package com.example.customdialog;
import android.app.AlertDialog;
import android.content.Context;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class CommonDialog extends AlertDialog {
private TextView titleTv ; //顯示的標題
private TextView messageTv ; //顯示的消息
private Button negtiveBn ,positiveBn; //確認和取消按鈕
public CommonDialog(Context context) {
super(context);
}
private String message;
private String title;
private String positive,negtive;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.custom_dialog);
initView(); //初始化界面控件
initEvent(); //初始化界面控件的點擊事件
}
//初始化界面控件
private void initView() {
negtiveBn = (Button) findViewById(R.id.negtive);
positiveBn = (Button) findViewById(R.id.positive);
titleTv = (TextView) findViewById(R.id.title);
messageTv = (TextView) findViewById(R.id.message);
}
//初始化界面控件的顯示數據
private void refreshView() {
//如果自定義了title和message會 顯示自定義的信息,否則不顯示title和message的信息
if (!TextUtils.isEmpty(title)) {
titleTv.setText(title); //設置標題控件的文本爲自定義的title
titleTv.setVisibility(View.VISIBLE); //標題控件設置爲顯示狀態
}else {
titleTv.setVisibility(View.GONE); //標題控件設置爲隱藏狀態
}
if (!TextUtils.isEmpty(message)) {
messageTv.setText(message); //設置消息控件的文本爲自定義的message信息
}
//如果自定義了按鈕的文本,則按鈕顯示自定義的文本,否則,按鈕顯示“確定”或“取消”文本
if (!TextUtils.isEmpty(positive)) {
positiveBn.setText(positive); //設置按鈕的文本爲自定義的文本信息
}else {
positiveBn.setText("確定"); //設置按鈕文本爲“確定”
}
if (!TextUtils.isEmpty(negtive)) {
negtiveBn.setText(negtive);
}else {
negtiveBn.setText("取消");
}
}
//初始化界面的確定和取消監聽器
private void initEvent() {
//設置確定按鈕的點擊事件的監聽器
positiveBn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onClickBottomListener!= null) {
onClickBottomListener.onPositiveClick();
}
}
});
//設置取消按鈕的點擊事件的監聽器
negtiveBn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if ( onClickBottomListener!= null) {
onClickBottomListener.onNegtiveClick();
}
}
});
}
@Override
public void show() {
super.show();
refreshView();
}
public interface OnClickBottomListener{
void onPositiveClick();//實現確定按鈕點擊事件的方法
void onNegtiveClick(); //實現取消按鈕點擊事件的方法
}
//設置確定取消按鈕的回調
public OnClickBottomListener onClickBottomListener;
public CommonDialog setOnClickBottomListener(OnClickBottomListener
onClickBottomListener){
this.onClickBottomListener = onClickBottomListener;
return this;
}
public CommonDialog setMessage(String message) {
this.message = message;
return this ;
}
public CommonDialog setTitle(String title) {
this.title = title;
return this ;
}
public CommonDialog setPositive(String positive) {
this.positive = positive;
return this ;
}
public CommonDialog setNegtive(String negtive) {
this.negtive = negtive;
return this ;
}
}
activty_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:gravity="center">
<Button
android:id="@+id/btn_dialog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="彈出自定義對話框"/>
</LinearLayout>
MainActivty.java
package com.example.customdialog;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
Button btn_dialog = findViewById(R.id.btn_dialog);
btn_dialog.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
final CommonDialog dialog = new CommonDialog(MainActivity.this);
dialog.setTitle("提示");
dialog.setMessage("您確定要刪除信息?");
dialog.setNegtive("取消");
dialog.setPositive("確定");
dialog.setOnClickBottomListener(new CommonDialog.
OnClickBottomListener() {
@Override
public void onPositiveClick() { //確定按鈕的點擊事件
dialog.dismiss();
}
@Override
public void onNegtiveClick() { //取消按鈕的點擊事件
dialog.dismiss();
}
});
dialog.show();
}
});
}
}
運行結果: