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

本文详细总结了Android系统的八大对话框,包括一般对话框、带有三个按钮的对话框、列表对话框、单选和多选对话框、等待及进度条对话框、编辑对话框、自定义对话框等。并提供了相关样式修改方法和源码地址。
摘要由CSDN通过智能技术生成

系统的八大对话框

对话框使用注意事项:
  • 修改对话框宽高的时候,要在dialog对话框show方法之后使用
  • 修改dialog样式的方法
    1. 在style中写dialog的样式,一般如下:通过下面属性来改变dialog的背景色等
 <style name="dialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item><!--边框-->
        <item name="android:windowIsFloating">true</item><!--是否浮现在activity之上-->
        <item name="android:windowIsTranslucent">true</item><!--半透明-->
        <item name="android:windowNoTitle">true</item><!--无标题-->
        <item name="android:windowBackground">@android:color/transparent</item><!--背景透明-->
        <item name="android:backgroundDimEnabled">true</item><!--模糊-->
        <item name="android:windowFullscreen">true</item>
    </style>
  1. 在创建对话框的时候引用该样式。
   final AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.dialog);
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. 带有三个按钮对话框

效果图
这里写图片描述

 /**
     * 三个按钮对话框
     * 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. 列表对话框

效果图
这里写图片描述

 /**
     * 列表对话框
     */
    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. 单选对话框

这里写图片描述

 /**
     * 单选对话框
     */
    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. 多选对话框

这里写图片描述

 /**
     * 多选对话框
     */
    ArrayList<Integer> 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. 等待对话框

这里写图片描述

 /**
     * 等待对话框
     */
    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. 进度条对话框

这里写图片描述


    /**
     * 进度条对话框
     */
    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. 编辑对话框

这里写图片描述

/**
     * 编辑对话框
     *
     * @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. 常用自定义对话框

这里写图片描述

 /**
     * 常用自定义对话框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样式:


    <style name="dialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item><!--边框-->
        <item name="android:windowIsFloating">true</item><!--是否浮现在activity之上-->
        <item name="android:windowIsTranslucent">true</item><!--半透明-->
        <item name="android:windowNoTitle">true</item><!--无标题-->
        <item name="android:windowBackground">@android:color/transparent</item><!--背景透明-->
        <item name="android:backgroundDimEnabled">true</item><!--模糊-->
        <item name="android:windowFullscreen">true</item>
    </style>
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. 全屏对话框

这里写图片描述

  /**
     * 全屏对话框
     */
    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样式:

 <style name="dialog2" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item><!--边框-->
        <item name="android:windowIsFloating">true</item><!--是否浮现在activity之上-->
        <item name="android:windowIsTranslucent">false</item><!--半透明-->
        <item name="android:windowNoTitle">true</item><!--无标题-->
        <item name="android:windowBackground">@android:color/white</item><!--背景透明-->
        <item name="android:backgroundDimEnabled">false</item><!--模糊-->
        <item name="android:windowFullscreen">true</item>

源码地址:

链接:http://pan.baidu.com/s/1jI0Qfqu 密码:7y94

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值