Android AlertDialog 弹出框
对话框是提示用户作出决定或输入额外信息的小窗口。对话框不会填充屏幕,通常用于需要用户采取行动才能继续执行的模式事件
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(); } }