对话框 dialog

  • 一、常用对话框
  • 普通对话框
  • 单选对话框
  • 多选对话框
  • 自定义内容对话框
  • 水平进度条对话框
  • 圆形进度条对话框
  • 日期选择对话框
  • 时间选择对话框
  • 二、自定义对话框(重难点)


一、常用对话框

普通对话框

Android中普通对话框 安卓普通对话框_Android中普通对话框

//普通对话框
    private void normal_dialog() {
        //1.构建者
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        //2.设置属性 icon图标 title标题 message内容
        builder.setIcon(R.mipmap.ic_launcher);
        builder.setTitle("这是标题");
        builder.setMessage("这是内容");
        //设置按钮 PositiveButton确定按钮(参数:"显示内容",点击监听)
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(MainActivity.this, "你点击了确定", Toast.LENGTH_SHORT).show();
            }
        });
        //设置按钮 NegativeButton取消按钮(参数:"显示内容",点击监听)
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(MainActivity.this, "你点击了取消", Toast.LENGTH_SHORT).show();
            }
        });
        //3.使用建造者创建对话框
        AlertDialog dialog = builder.create();
        //4.显示
        dialog.show();
    }

单选对话框

Android中普通对话框 安卓普通对话框_ide_02

单选对话框 SingleChoiceItems

//单选对话框
    private void single_dialog() {
        //1.构建者
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        //2.设置属性 icon图标 title标题 message内容
        builder.setIcon(R.mipmap.ic_launcher);
        builder.setTitle("这是标题");
        //设置按钮 PositiveButton确定按钮(参数:"显示内容",点击监听)
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(MainActivity.this, "你点击了确定", Toast.LENGTH_SHORT).show();
            }
        });
        //设置按钮 NegativeButton取消按钮(参数:"显示内容",点击监听)
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(MainActivity.this, "你点击了取消", Toast.LENGTH_SHORT).show();
            }
        });
        //3设置单选列表 SingleChoiceItems单选 (参数:数据源,默认选中下标,点击监听)
        final String[] datas = {"男", "女", "不详"};
        builder.setSingleChoiceItems(datas, 2, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(MainActivity.this, "你选中的是:" + datas[i], Toast.LENGTH_SHORT).show();
            }
        });
        //4.使用建造者创建对话框
        AlertDialog dialog = builder.create();
        //5.显示
        dialog.show();
    }

多选对话框

多选对话框 NegativeButton 与单选区别就是一个词语

//多选对话框
    private void mulite_dialog() {
        //1.构建者
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        //2.设置属性 icon图标 title标题 message内容
        builder.setIcon(R.mipmap.ic_launcher);
        builder.setTitle("这是标题");
        //设置按钮 PositiveButton确定按钮(参数:"显示内容",点击监听)
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(MainActivity.this, "你点击了确定", Toast.LENGTH_SHORT).show();
            }
        });
        //设置按钮 NegativeButton取消按钮(参数:"显示内容",点击监听)
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(MainActivity.this, "你点击了取消", Toast.LENGTH_SHORT).show();
            }
        }); 
        //3.设置多选列表 SingleChoiceItems单选 (参数:数据源,默认选中状态,点击监听)
        final String[] datas = {"吃饭", "睡觉", "打豆豆"};
        final boolean[] flags = {false, true, true};
        builder.setMultiChoiceItems(datas, flags, new DialogInterface.OnMultiChoiceClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i, boolean b) {
                Toast.makeText(MainActivity.this, "你选中的是:" + datas[i], Toast.LENGTH_SHORT).show();
            }
        });
        //4.使用建造者创建对话框
        AlertDialog dialog = builder.create();
        //5.显示
        dialog.show();
    }

自定义内容对话框

Android中普通对话框 安卓普通对话框_android_03

仅改变内容 内容布局可随意更改

<?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">
    <TextView
        android:id="@+id/tv"
        android:text="自定义内容(图片素材)"
        android:gravity="center_horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <ImageView
        android:id="@+id/iv"
        android:src="@mipmap/img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>
//自定义内容对话框
    private void custom_dialog() {
        //1.获取布局视图
        View inflate = LayoutInflater.from(this).inflate(R.layout.custom_layout, null);
        //2.构建者
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        //属性
        builder.setIcon(R.mipmap.ic_launcher);
        builder.setTitle("这是标题");
        //设置按钮 PositiveButton确定按钮(参数:"显示内容",点击监听)
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(MainActivity.this, "你点击了确定", Toast.LENGTH_SHORT).show();
            }
        });
        //设置按钮 NegativeButton取消按钮(参数:"显示内容",点击监听)
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(MainActivity.this, "你点击了取消", Toast.LENGTH_SHORT).show();
            }
        });
        //3.设置自定义布局
        builder.setView(inflate);
        //4.使用建造者创建对话框
        AlertDialog dialog = builder.create();
        //5.显示
        dialog.show();
    }

水平进度条对话框

实例进度条对象 用style变换样式 系统自带的样式 STYLE_HORIZONTAL

//水平进度条对话框
    private void hor_progress_dialog() {
        //1.实例化对象 进度条对话框 ProgressDialog
        final ProgressDialog dialog = new ProgressDialog(this);
        //2.设置属性 ProgressStyle进度条样式 Max进度条最大值 Message提示语
        dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        dialog.setMax(100);
        dialog.setMessage("正在下载");
        //3.显示
        dialog.show();
        //4.定时器 模拟下载过程使进度条动
        final Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            //进度条状态初始为0
            int progreess = 0;

            @Override
            public void run() {
                //进度条状态超出最大值执行 停止计时器 消失对话框
                if (progreess >= 100) {
                    //对话框撤销
                    dialog.dismiss();
                    //计时器取消
                    timer.cancel();
                }
                //每次进度为20 共100
                dialog.setProgress(progreess += 20);
            }
            //0秒够执行,每隔1000毫秒执行一次,也就是每秒执行一次
        }, 0, 1000);
    }

圆形进度条对话框

Android中普通对话框 安卓普通对话框_android studio_04

实例进度条对象 用style变换样式 系统自带的样式 STYLE_SPINNER

//圆形进度条对话框
    private void spi_progress_dialog() {
        //1.实例化对象 进度条对话框 ProgressDialog
        final ProgressDialog dialog = new ProgressDialog(this);
        //2.设置属性 ProgressStyle进度条样式 Max进度条最大值 Message提示语
        dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);//圆形
        dialog.setMax(100);
        dialog.setMessage("正在下载");
        //3.显示
        dialog.show();
        //4.定时器 模拟下载过程使进度条动
        final Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            //进度条状态初始为0
            int progreess = 0;

            @Override
            public void run() {
                //进度条状态超出最大值执行 停止计时器 消失对话框
                if (progreess >= 100) {
                    //对话框撤销
                    dialog.dismiss();
                    //计时器取消
                    timer.cancel();
                }
                //每次进度为20 共100
                dialog.setProgress(progreess += 20);
            }
            //0秒够执行,每隔1000毫秒执行一次,也就是每秒执行一次
        }, 0, 1000);
    }

日期选择对话框

Android中普通对话框 安卓普通对话框_ide_05

系统自带的日期对话框 默认样式由版本决定

//日期对话框
    private void data_dialog() {
        //1.实例化日历对象 获取系统日期
        Calendar calendar = Calendar.getInstance();
        //2. DatePickerDialog日期选择对话框
        DatePickerDialog dialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker datePicker, int year, int month, int dayOfMonth) {
                Toast.makeText(MainActivity.this, year + "-" + (month + 1) + "-" + dayOfMonth, Toast.LENGTH_SHORT).show();
            }
            //YEAR 年 MONTH月 DAY_OF_MONTH日
        }, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
        //3.显示
        dialog.show();
    }

时间选择对话框

Android中普通对话框 安卓普通对话框_进度条_06

系统自带的日期对话框 默认样式由版本决定

//时间选择对话框
    private void time_dialog() {
        //1.实例化日历对象 获取系统时间
        Calendar calendar = Calendar.getInstance();
        //2.TimePickerDialog时间选择对话框
        TimePickerDialog dialog = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
            @Override
            public void onTimeSet(TimePicker timePicker, int hourOfDay, int minute) {
                Toast.makeText(MainActivity.this, hourOfDay + ":" + minute, Toast.LENGTH_SHORT).show();
            }
            //HOUR小时 MINUTE分钟 是否24小时制
        }, calendar.get(Calendar.HOUR), calendar.get(Calendar.MINUTE), true);
        //3.显示
        dialog.show();
    }

二、自定义对话框(重难点)

Android中普通对话框 安卓普通对话框_ide_07

自定义布局 custom_dialog_layout.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#11ffffff">

    <LinearLayout
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:orientation="vertical">

        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginTop="10dp"
            android:text="设置新标题"

            android:textColor="#38ADFF"
            android:textSize="16sp" />

        <TextView
            android:id="@+id/message"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_margin="20dp"
            android:text="设置新内容" />

        <View
            android:layout_width="match_parent"
            android:layout_height="1px"
            android:layout_marginTop="15dp"
            android:background="#E4E4E4" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:orientation="horizontal">

            <Button
                android:id="@+id/no"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_marginLeft="10dp"
                android:layout_weight="1"
                android:background="@null"
                android:gravity="center"
                android:lines="1"
                android:text="取消"
                android:textColor="#FF0A0A"
                android:textSize="16sp" />

            <View
                android:layout_width="1px"
                android:layout_height="match_parent"
                android:background="#E4E4E4" />

            <Button
                android:id="@+id/yes"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_marginRight="10dp"
                android:layout_weight="1"
                android:background="@null"
                android:gravity="center"
                android:lines="1"
                android:text="确定"
                android:textColor="#3DE444"
                android:textSize="16sp" />
        </LinearLayout>
    </LinearLayout>
</RelativeLayout>

通过自定义接口实现调用 MainActivity.class

//自定义对话框
    private void custom_dialog() {
        CustomActivity custom = new CustomActivity(this);
        //设置新文本
        custom.setStrTitle("警告");
        custom.setStrMessage("程序员的快乐你想象不到!");
        //设置点击监听
        custom.setYesClicjListener(new CustomActivity.YesClicjListener() {
            @Override
            public void yesClick() {
                Toast.makeText(MainActivity.this, "222", Toast.LENGTH_SHORT).show();
            }
        });
        custom.setNoClicjListener(new CustomActivity.NoClicjListener() {
            @Override
            public void noClick() {
                Toast.makeText(MainActivity.this, "取消按钮", Toast.LENGTH_SHORT).show();
            }
        });
        //显示
        custom.show();
    }

自定义接口实现 传参 CustomActivity.class

package com.bawei.test01;

import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import androidx.annotation.NonNull;

//继承Dialog
public class CustomActivity extends Dialog {
    private TextView title;
    private TextView message;
    private Button no;
    private Button yes;
    //自定义参数
    private String strTitle, strMessage;

    public String getStrTitle() {
        return strTitle;
    }

    public void setStrTitle(String strTitle) {
        this.strTitle = strTitle;
    }

    public String getStrMessage() {
        return strMessage;
    }

    public void setStrMessage(String strMessage) {
        this.strMessage = strMessage;
    }

    //-------
    //自定义接口 确定按钮功能
    public interface YesClicjListener {
        void yesClick();//调用的方法
    }

    //申明一个成员
    private YesClicjListener yesClicjListener;

    //set get方法
    public YesClicjListener getYesClicjListener() {
        return yesClicjListener;
    }

    public void setYesClicjListener(YesClicjListener yesClicjListener) {
        this.yesClicjListener = yesClicjListener;
    }

    //自定义接口 取消按钮功能
    public interface NoClicjListener {
        void noClick();
    }

    //申明一个成员
    private NoClicjListener noClicjListener;

    //set get方法
    public NoClicjListener getNoClicjListener() {
        return noClicjListener;
    }

    public void setNoClicjListener(NoClicjListener noClicjListener) {
        this.noClicjListener = noClicjListener;
    }

    //---------------
    public CustomActivity(@NonNull Context context) {
        super(context);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.custom_dialog_layout);
        //初始化控件
        initViews();
        //数据不为空 这设置新文本
        if (strMessage != null) {
            //设置新消息数据
            message.setText(strMessage);
        }
        if (strTitle != null) {
            //设置新消息标题
            title.setText(strTitle);
        }
        //确定按钮监听
        yes.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dismiss();//撤销
            }
        });
        //取消按钮监听
        no.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dismiss();//撤销
            }
        });
    }

    private void initViews() {
        title = (TextView) findViewById(R.id.title);
        message = (TextView) findViewById(R.id.message);
        no = (Button) findViewById(R.id.no);
        yes = (Button) findViewById(R.id.yes);
    }

}