Android AlertDialog 弹出框

对话框是提示用户作出决定或输入额外信息的小窗口。对话框不会填充屏幕,通常用于需要用户采取行动才能继续执行的模式事件

Android Dialog 继承图谱

AlertDialog

AlertDialog 不同于前面已经学习过的 UI 控件,它不能用 new 方法创造出来,也不能用 XML 创建

我们只能通过 AlertDialob 的内部类 Builder 来创建

AlertDialog.Builder(Context context)
AlertDialog.Builder(Context context, int themeResId)

然后调用 AlertDialog 的一些方法进行定制,最后调用 show() 方法来显示

所以,创建一个 AlertDialog 的基本流程是

  1. 创建 AlertDialog.Builder 对象

    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
    
  2. 调用 setIcon() 设置图标, setTitle()setCustomTitle() 设置标题

  3. 设置对话框的内容 setMessage()

  4. 调用 setPositive/Negative/NeutralButton() 设置 确定取消普通 按钮

  5. 调用 create() 方法创建这个对象,再调用 show() 方法将对话框显示出来

几种常用的对话框

接下来学习如何使用 AlertDialog 创建几种常见的对话框

  1. 普通对话框
  2. 普通列表对话框
  3. 单选列表对话框
  4. 多选列表对话框

注意 : 下面的创建方式只用于学习目的,一般项目中都是点一个按钮然后触发弹框

普通对话框


  1. 创建一个 空的 Android 项目 cn.twle.android.AlertDialog

  2. 下载 /static/i/android/info.png 并放到 res/drawable 目录下

  3. 修改 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();    // 显示对话框
        }
    }
    

普通列表对话框


  1. 复用上面的 demo

  2. 修改 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();
        }
    }
    

单选列表对话框


  1. 复用上面的 demo

  2. 修改 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();
        }
    }
    

多选列表对胡框


  1. 复用上面的 demo

  2. 修改 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();
        }
    }
    

参考文档

  1. Android AlertDialog

  2. Android 对话框

Android 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.