Android系统总结之---AlertDialog笔记

系统的八大对话框

对话框使用注意事项:

  • 修改对话框宽高的时候,要在dialog对话框show方法之后使用
  • 修改dialog样式的方法
    1. 在style中写dialog的样式,一般如下:通过下面属性来改变dialog的背景色等
 
  1. 在创建对话框的时候引用该样式。
   final AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.dialog);

1. 一般对话框

效果图

Android系统总结之---AlertDialog笔记_第1张图片

  /**
     * 一般对话框
     */
    private void showNormalDialog() {
    /* @setIcon 设置对话框图标
     * @setTitle 设置对话框标题
     * @setMessage 设置对话框消息提示
     * setXXX方法返回Dialog对象,因此可以链式设置属性
     */
        final AlertDialog.Builder normalDialog =
                new AlertDialog.Builder(MainActivity.this);
        normalDialog.setIcon(R.mipmap.ic_launcher);
        normalDialog.setTitle("我是一个普通Dialog");
        normalDialog.setMessage("你要点击哪一个按钮呢?");
        normalDialog.setPositiveButton("确定",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(getApplicationContext(), "确定", Toast.LENGTH_SHORT).show();
                    }
                });
        normalDialog.setNegativeButton("关闭",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(getApplicationContext(), "关闭", Toast.LENGTH_SHORT).show();
                    }
                });
        // 显示
        normalDialog.show();
    }

2. 带有三个按钮对话框

效果图
Android系统总结之---AlertDialog笔记_第2张图片

 /**
     * 三个按钮对话框
     * setNeutralButton
     */
    public void showMultiBtnDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("我是一个普通Dialog").setMessage("你要点击哪一个按钮呢?");
        builder.setIcon(R.mipmap.ic_launcher);

        builder.setNegativeButton("按钮1", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(getApplicationContext(), "按钮1", Toast.LENGTH_SHORT).show();
            }
        });

        builder.setPositiveButton("按钮2", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(getApplicationContext(), "按钮2", Toast.LENGTH_SHORT).show();
            }
        });

        builder.setNeutralButton("按钮3", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(getApplicationContext(), "按钮3", Toast.LENGTH_SHORT).show();
            }
        });

        builder.create().show();
    }

3. 列表对话框

效果图
Android系统总结之---AlertDialog笔记_第3张图片

 /**
     * 列表对话框
     */
    private void showListDialog() {
        final String[] items = {"我是1", "我是2", "我是3", "我是4", "我是1", "我是2", "我是3", "我是4", "我是1", "我是2", "我是3", "我是4"};
        AlertDialog.Builder listDialog =
                new AlertDialog.Builder(MainActivity.this);
        listDialog.setTitle("我是一个列表Dialog");
        listDialog.setItems(items, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // which 下标从0开始
                // ...To-do
                Toast.makeText(MainActivity.this,
                        "你点击了" + items[which],
                        Toast.LENGTH_SHORT).show();
            }
        });
        AlertDialog dialog = listDialog.create();
        dialog.show();
        //以下这些代码时用来设置dialog的高度,一定要放在show方法之后。
        WindowManager.LayoutParams attributes =
                dialog.getWindow().getAttributes();
        attributes.height = 400;
        dialog.getWindow().setAttributes(attributes);
    }

4. 单选对话框

Android系统总结之---AlertDialog笔记_第4张图片

 /**
     * 单选对话框
     */
    int yourChoice;

    private void showSingleChoiceDialog() {
        final String[] items = {"我是1", "我是2", "我是3", "我是4"};
        yourChoice = -1;
        AlertDialog.Builder singleDialog = new AlertDialog.Builder(this);
        singleDialog.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                yourChoice = which;
            }
        });

        singleDialog.setNegativeButton("确认", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                if (yourChoice != -1) {
                    Toast.makeText(MainActivity.this,
                            "你选择了" + items[yourChoice],
                            Toast.LENGTH_SHORT).show();
                }
            }
        });
        singleDialog.show();
    }

5. 多选对话框

Android系统总结之---AlertDialog笔记_第5张图片

 /**
     * 多选对话框
     */
    ArrayList yourChoices = new ArrayList<>();

    private void showMultiChoiceDialog() {
        yourChoices.clear();
        final String[] items = {"我是1", "我是2", "我是3", "我是4"};
        AlertDialog.Builder multiChoiceDialog = new AlertDialog.Builder(this);
        // 设置默认选中的选项,全为false默认均未选中
        final boolean initChoiceSets[] = {false, false, false, false};
        multiChoiceDialog.setTitle("我是一个多选Dialog");
        multiChoiceDialog.setMultiChoiceItems(items, initChoiceSets, new DialogInterface.OnMultiChoiceClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                if (isChecked) {
                    yourChoices.add(which);
                } else {
                    yourChoices.remove(which);
                }
            }
        });

        multiChoiceDialog.setPositiveButton("确定",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        int size = yourChoices.size();
                        String str = "";
                        for (int i = 0; i < size; i++) {
                            str += items[yourChoices.get(i)] + " ";
                        }
                        Toast.makeText(MainActivity.this,
                                "你选中了" + str,
                                Toast.LENGTH_SHORT).show();
                    }
                });
        multiChoiceDialog.show();

    }

6. 等待对话框

Android系统总结之---AlertDialog笔记_第6张图片

 /**
     * 等待对话框
     */
    private void showWaitingDialog() {
         /* 等待Dialog具有屏蔽其他控件的交互能力
   * @setCancelable 为使屏幕不可点击,设置为不可取消(false)
   * 下载等事件完成后,主动调用函数关闭该Dialog
   */
        final ProgressDialog waitingDialog =
                new ProgressDialog(MainActivity.this);
        waitingDialog.setTitle("我是一个等待Dialog");
        waitingDialog.setMessage("等待中...");
        waitingDialog.setIndeterminate(true);
        waitingDialog.setCancelable(false);
        waitingDialog.show();

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                waitingDialog.dismiss();
                Toast.makeText(MainActivity.this,
                        "加载数据完成",
                        Toast.LENGTH_SHORT).show();
            }
        }, 2000);
    }

7. 进度条对话框

Android系统总结之---AlertDialog笔记_第7张图片


    /**
     * 进度条对话框
     */
    private void showProgressDialog() {
  /* @setProgress 设置初始进度
   * @setProgressStyle 设置样式(水平进度条)
   * @setMax 设置进度最大值
   */
        final int MAX_PROGRESS = 100;
        final ProgressDialog progressDialog =
                new ProgressDialog(MainActivity.this);
        progressDialog.setProgress(0);
        progressDialog.setTitle("我是一个进度条Dialog");
        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        progressDialog.setMax(MAX_PROGRESS);
        progressDialog.show();
  /* 模拟进度增加的过程
   * 新开一个线程,每个100ms,进度增加1
   */
        new Thread(new Runnable() {
            @Override
            public void run() {
                int progress = 0;
                while (progress < MAX_PROGRESS) {
                    try {
                        Thread.sleep(50);
                        progress++;
                        progressDialog.setProgress(progress);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                // 进度达到最大值后,窗口消失
                progressDialog.cancel();
            }
        }).start();
    }

8. 编辑对话框

Android系统总结之---AlertDialog笔记_第8张图片

/**
     * 编辑对话框
     *
     * @setView 装入一个EditView
     */
    private void showInputDialog() {
        final EditText et = new EditText(this);
        AlertDialog.Builder inputDialog = new AlertDialog.Builder(this);
        inputDialog.setTitle("我是可以输入的对话框");
        inputDialog.setView(et);
        inputDialog.setNegativeButton("确认", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(getApplicationContext(), et.getText().toString(), Toast.LENGTH_LONG).show();
            }
        });

        inputDialog.show();

    }

9. 常用自定义对话框

Android系统总结之---AlertDialog笔记_第9张图片

 /**
     * 常用自定义对话框1
     */
    private void myDialogStyle1() {

        final AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.dialog);
        View view = View.inflate(this, R.layout.dialog_my1, null);
        builder.setView(view);
        view.findViewById(R.id.dialog_twobtn_btn_left).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this,
                        "左边",
                        Toast.LENGTH_SHORT).show();
            }
        });
        view.findViewById(R.id.dialog_twobtn_btn_right).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this,
                        "右边",
                        Toast.LENGTH_SHORT).show();
            }
        });
        builder.show();
    }

style样式:


    

10. 底部的对话框

Android系统总结之---AlertDialog笔记_第10张图片

 /**
     * 常用自定义对话框2 居于底部的对话框
     */
    private void myDialogStyle2() {
        final AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.dialog);
        View view = View.inflate(this, R.layout.dialog_my2, null);
        builder.setView(view);
        AlertDialog dialog = builder.create();
        dialog.show();
        Window window = dialog.getWindow();
        WindowManager.LayoutParams lp = window.getAttributes();
//         lp.width = 1080;
        lp.width = WindowManager.LayoutParams.MATCH_PARENT;
        lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
        lp.gravity = Gravity.BOTTOM;
        window.setAttributes(lp);

//        window.setBackgroundDrawableResource(android.R.color.transparent);  
    }

11. 全屏对话框

Android系统总结之---AlertDialog笔记_第11张图片

  /**
     * 全屏对话框
     */
    private void myDialogStyle3() {
        final AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.dialog2);
        View view = View.inflate(this, R.layout.dialog_my3, null);
        builder.setView(view);
        AlertDialog dialog = builder.create();
        dialog.show();
        Window window = dialog.getWindow();
        WindowManager.LayoutParams lp = window.getAttributes();
        lp.width = WindowManager.LayoutParams.MATCH_PARENT;
        lp.height = WindowManager.LayoutParams.MATCH_PARENT;
        window.setAttributes(lp);
    }

style样式: