Android 五种常用dialog的使用

Posted 森然献凉i

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 五种常用dialog的使用相关的知识,希望对你有一定的参考价值。

常规dialog

一般作为提示使用

xml文件

activity_main.xml

    <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/bt1"
            android:text="常规对话框"
            android:onClick="bt1">
        </Button>

MainActivity.Java


    /**
     *常规对话框的点击事件
     * @param view
     */
    public void bt1(View view) {
        new AlertDialog.Builder(this)
                //图标
                .setIcon(R.drawable.ic_launcher_background)
                //标题
                .setTitle("吃饭")
                //不可点击外部区域取消对话框
                .setCancelable(false)
                //内容
                .setMessage("你吃饭了吗")
                //第一个参数选项,第二个参数为该选项的点击事件
                .setPositiveButton("吃了", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        Toast.makeText(MainActivity.this, "吃这么快", Toast.LENGTH_SHORT).show();
                    }
                })
                //第一个参数选项,第二个参数为该选项的点击事件
                .setNegativeButton("没吃", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        Toast.makeText(MainActivity.this, "还不吃", Toast.LENGTH_SHORT).show();
                    }
                })
                //展示
                .show();
    }

效果图

 

带选项列表的dialog

一个选择类的对话框

xml文件

activity_main.xml

 <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/bt2"
            android:text="带选项列表对话框"
            android:onClick="bt2">
        </Button>

MainActivity.Java

这个dialog为单选框,如需多选,setSingleChoiceItems方法替换为setMultiChoiceItems方法

 /**
     *带选项列表对话框的点击事件
     * @param view
     */

    public void bt2(View view) {
        //定义一个字符串数组存放列表信息
        String[]colors={"红","黄","蓝","绿","黑"};
        new AlertDialog.Builder(this)
                //不可点击外部区域取消对话框
                .setCancelable(false)
                //标题
                .setTitle("选择一种颜色")
                .setPositiveButton("ok", null)
                //实现单选列表,第一个参数使用colors数据为选项,第二个参数为默认选中的位置(如不需要默认选中,则设为-1),第三个位置参数为该选项的点击事件
                //如需多选则使用.setMultiChoiceItems()
                .setSingleChoiceItems(colors, 0, new DialogInterface.OnClickListener() {

                    @Override
                    //第一个参数为调用这个对话框的本身,第二个参数为位置
                    public void onClick(DialogInterface dialogInterface, int i) {
                        Toast.makeText(MainActivity.this, colors[i], Toast.LENGTH_SHORT).show();
                    }
                })
                .show();
    }

效果图

 

自定义视图dialog

一个自己定义样式的dialog,这里我模拟了一个登录弹窗

需先在layout里创建一个xml文件,这里我命名为dialog_view

dialog_view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="20dp">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/user"
        android:hint="用户名">
    </EditText>
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/paw"
        android:hint="密码">
    </EditText>

</LinearLayout>

xml文件

activity_main.xml

  <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/bt3"
            android:text="自定义视图对话框"
            android:onClick="bt3">
        </Button>

MainActivity.Java

/**
     * 自定义视图对话框
     * @param view
     */
    public void bt3(View view) {
        //使用inflate方法,从一个XML的资源文件当中获取一个视图
        View v=View.inflate(this,R.layout.dialog_view,null);
        //获取dialog_view中的组件
        final EditText eduser=v.findViewById(R.id.user);
        final EditText edpaw=v.findViewById(R.id.paw);
        new AlertDialog.Builder(this)
                //标题
                .setTitle("用户登录")
                //不可点击外部区域取消对话框
                .setCancelable(false)
                //设置视图
                .setView(v)
                .setPositiveButton("登录", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        //按钮点击时,获取控件中的数据
                        String username=eduser.getText().toString().trim();
                        String pawd=edpaw.getText().toString().trim();
                        //通过Toast输出
                        Toast.makeText(MainActivity.this, "用户名:"+username+"密码:"+pawd, Toast.LENGTH_SHORT).show();
                    }
                })
                .show();

    }

效果图

 

带进度条的dialog

可用于加载等待

xml文件

activity_main.xml

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/bt4"
            android:text="启动带进度条的对话框"
            android:onClick="bt4">
        </Button>

MainActivity.Java

 /**
     * 启动带进度条的对话框
     * @param view
     */
    public void bt4(View view) {
        //创建一个进度条对话框
        ProgressDialog progressDialog=new ProgressDialog(this);
        //标题
        progressDialog.setTitle("进度条对话框");
        //设置当前进度
        progressDialog.setProgress(30);
        //设置样式为水平状进度条
        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        //不可点击外部区域取消对话框
        progressDialog.setCancelable(false);
        progressDialog.show();

        new Thread(new Runnable() {
            @Override
            public void run() {
                //for循环使进度条不断累加推进
                for (int i=1;i<20;i++){
                    try {
                        //通过线程休眠是=使两次进度条修改时间之间间隔200毫秒
                        Thread.sleep(200);
                    }catch (InterruptedException e){
                        e.printStackTrace();
                    }
                    //获取当前的进度条加20轮,每轮前进5格
                    progressDialog.setProgress(progressDialog.getProgress()+5);
                }
                //完成后隐藏进度条
                progressDialog.dismiss();
            }
        }).start();

    }

效果图 

 

日期选择dialog

用于生日选择,时间选择等

xml文件

activity_main.xml

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/bt5"
            android:text="日期选择对话框"
            android:onClick="bt5">
        </Button>

MainActivity.Java

 /**
     * 日期选择对话框
     * @param view
     */
    public void bt5(View view) {
        //Calendar日历类获取年月日的三个字段
        Calendar calendar=Calendar.getInstance();
        int year=calendar.get(Calendar.YEAR);
        int month=calendar.get(Calendar.MONTH);
        int day=calendar.get(Calendar.DAY_OF_MONTH);

        //创建一个日期选择对话框,OnDateSetListener表示在日期选择当中会弹出一个onDateSet返回日期的年月日
        new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
            @Override
            //onDateSet带回选中的年月日
            public void onDateSet(DatePicker datePicker, int year, int month, int dayofminth) {
                Toast.makeText(MainActivity.this, "选中了"+year+"年"+month+"月"+dayofminth+"日", Toast.LENGTH_SHORT).show();

            }
            //设置当前的年月日
        },year,month,day).show();
    }

效果图

结束

以上是关于Android 五种常用dialog的使用的主要内容,如果未能解决你的问题,请参考以下文章

如何在Android开发中熟练使用五种Toast的特效

如何在Android开发中熟练使用五种Toast的特效

如何使用 Kotlin 从 Android 中的片段访问另一个片段?

Android常用实例—Alert Dialog的使用

android dialog

(转载)Android常用的Dialog对话框用法