对话框是提示用户作出决定或输入额外信息的小窗口。对话框不会填充屏幕,通常用于需要用户采取行动才能继续执行的模式事件
Android Dialog 继承图谱
AlertDialog
AlertDialog 不同于前面已经学习过的 UI 控件,它不能用 new 方法创造出来,也不能用 XML 创建
我们只能通过 AlertDialob 的内部类 Builder 来创建
AlertDialog.Builder(Context context)
AlertDialog.Builder(Context context, int themeResId)
然后调用 AlertDialog 的一些方法进行定制,最后调用 show() 方法来显示
所以,创建一个 AlertDialog 的基本流程是
创建 AlertDialog.Builder 对象
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
调用 setIcon() 设置图标, setTitle() 或 setCustomTitle() 设置标题
设置对话框的内容 setMessage()
调用 setPositive/Negative/NeutralButton() 设置 确定,取消,普通 按钮
调用 create() 方法创建这个对象,再调用 show() 方法将对话框显示出来
几种常用的对话框
接下来学习如何使用 AlertDialog 创建几种常见的对话框
普通对话框
普通列表对话框
单选列表对话框
多选列表对话框
注意 : 下面的创建方式只用于学习目的,一般项目中都是点一个按钮然后触发弹框
普通对话框
创建一个 空的 Android 项目 cn.twle.android.AlertDialog
下载 /static/i/android/info.png 并放到 res/drawable 目录下
修改 MainActivity.java 创建一个普通的对话框
package cn.twle.android.alertdialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.content.DialogInterface;
import android.content.Context;
import android.app.AlertDialog;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Context ctx = MainActivity.this;
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setIcon(R.drawable.info)
.setTitle("系统提示")
.setMessage("这是一个最普通的 AlertDialog,\n带有三个按钮,分别是取消,普通和确定");
// 取消按钮
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(ctx, "你点击了取消按钮~", Toast.LENGTH_SHORT).show();
}
});
// 确定按钮
builder. setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(ctx, "你点击了确定按钮~", Toast.LENGTH_SHORT).show();
}
});
// 普通按钮
builder.setNeutralButton("普通按钮", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(ctx, "你点击了普通按钮~", Toast.LENGTH_SHORT).show();
}
});
AlertDialog alert = builder.create(); // 创建 AlertDialog 对象
alert.show(); // 显示对话框
}
}
普通列表对话框
复用上面的 demo
修改 MainActivity.java
package cn.twle.android.alertdialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.content.DialogInterface;
import android.content.Context;
import android.app.AlertDialog;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final String[] lang = new String[]{"Kotlin", "Java", "Python", "PHP", "C#", "Ruby", "Perl"};
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setIcon(R.drawable.info).setTitle("选择你喜欢的开发语言");
builder.setItems(lang, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), "你选择了" + lang[which], Toast.LENGTH_SHORT).show();
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
单选列表对话框
复用上面的 demo
修改 MainActivity.java
package cn.twle.android.alertdialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.content.DialogInterface;
import android.content.Context;
import android.app.AlertDialog;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final String[] city = new String[]{"北京", "上海", "广州", "深圳", "杭州", "成都", "厦门"};
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setIcon(R.drawable.info).setTitle("选择你想去的城市,只能选一个哦~");
builder.setSingleChoiceItems(city, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), "你选择了" + city[which], Toast.LENGTH_SHORT).show();
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
多选列表对胡框
复用上面的 demo
修改 MainActivity.java
package cn.twle.android.alertdialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.content.DialogInterface;
import android.content.Context;
import android.app.AlertDialog;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final String[] fav = new String[]{"喜剧", "悲剧", "爱情", "动作"};
// 定义一个用来记录个列表项状态的 boolean 数组
final boolean[] checkItems = new boolean[]{false, false, false, false};
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setIcon(R.drawable.info);
builder.setMultiChoiceItems(fav, checkItems, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
checkItems[which] = isChecked;
}
});
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String result = "";
for (int i = 0; i < checkItems.length; i++) {
if (checkItems[i])
result += fav[i] + " ";
}
Toast.makeText(getApplicationContext(), "你喜欢:" + result, Toast.LENGTH_SHORT).show();
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
}
参考文档
Android AlertDialog
Android 对话框