Android十大常用对话框

    • 一、对话框效果
    • 二、代码

最近老师叫我们整理android常用的对话框,我整理了十种对话框,用于分享交流,希望指正!

一、对话框效果

主界面

1.普通对话框

2.单选对话框

3.多选对话框

4.列表对话框

5.不带进度条对话框

6.带进度条对话框

7.自定义布局对话框

8.自定义对话框

9.日期对话框

10.时间对话框

二、代码

1.将所有的对话框方法封装在DialogBox类中

package com.example.homeworkfour;import android.app.Activity;import android.app.AlertDialog;import android.app.DatePickerDialog;import android.app.Dialog;import android.app.ProgressDialog;import android.app.TimePickerDialog;import android.content.DialogInterface;import android.icu.util.Calendar;import android.os.Build;import android.view.View;import android.widget.Button;import android.widget.DatePicker;import android.widget.EditText;import android.widget.TimePicker;import android.widget.Toast;import androidx.annotation.RequiresApi;public class DialogBox {    /**     * 1.普通对话框     */    protected void ordinaryDialogBox(final Activity activity){        AlertDialog.Builder dialogBox = new AlertDialog.Builder(activity);        dialogBox.setTitle("普通对话框");        dialogBox.setMessage("你要离开吗?");        dialogBox.setPositiveButton("确定", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                Toast.makeText(activity,"我要离开!",Toast.LENGTH_SHORT).show();            }        });        dialogBox.setNegativeButton("取消", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                Toast.makeText(activity,"我不想离开!",Toast.LENGTH_SHORT).show();            }        });        dialogBox.create().show();    }    /**     * 2.单选对话框     */    protected void radioDialogBox(final Activity activity){        final AlertDialog.Builder dialogBox = new AlertDialog.Builder(activity);        dialogBox.setTitle("你最喜欢的科目是?");        /*        *因为setMessage和setSingleChoiceItems的显示区域互相冲突,        *所以它们不能被同时使用,在这里我们必须注释掉掉这下面这行代码,        * 但是,我们仍然可以使用setTitle()来设置标题或消息        */        //dialogBox.setMessage("");        final String[] items = {"物理","化学","生物","历史"};        dialogBox.setSingleChoiceItems(items,-1, new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                Toast.makeText(activity,"你最喜欢的科目是"+items[which],Toast.LENGTH_SHORT).show();                //选择一个选项之后,就立即关闭对话框                dialog.dismiss();            }        });        dialogBox.create().show();    }    /**     * 3.多选对话框     */    protected void multipleDialogBox(final Activity activity){        AlertDialog.Builder dialogBox = new AlertDialog.Builder(activity);        dialogBox.setTitle("你喜欢哪些食物?");        final String[] items = {"胡萝卜","白菜","菠菜","土豆","黄瓜","西红柿"};        //标识选项的状态,false为未选中,true为选中        final boolean[] check = {false,false,false,false,false,false};        dialogBox.setMultiChoiceItems(items, check, new DialogInterface.OnMultiChoiceClickListener() {            @Override            public void onClick(DialogInterface dialog, int which, boolean isChecked) {                //当被选中时,选项的状态为true,否则为false                if (isChecked){                    check[which] = true;                    Toast.makeText(activity,"你选中了"+items[which],Toast.LENGTH_SHORT).show();                }else {                    check[which] = false;                    Toast.makeText(activity,"你取消了"+items[which],Toast.LENGTH_SHORT).show();                }            }        });        dialogBox.setPositiveButton("确定", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                String str = "";                for (int i = 0; i < check.length; i++) {                    if (check[i]){                        str = str + "," + items[i];                    }                }                //显示被选中的内容                if(str!="") {                    Toast.makeText(activity, "你喜欢" + str, Toast.LENGTH_SHORT).show();                }            }        });        dialogBox.create().show();    }    /**     * 4.列表对话框     */    protected void listDialogBox(final Activity activity){        AlertDialog.Builder dialogBox = new AlertDialog.Builder(activity);        dialogBox.setTitle("课程安排:");        final String[] items = {"第一节(数学)","第二节(地理)","第三节(历史)","第四节(美术)"};        dialogBox.setItems(items, new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                Toast.makeText(activity,items[which],Toast.LENGTH_SHORT).show();            }        });        dialogBox.create().show();    }    /**     * 5.不带进度条对话框     */    protected void noProgressDialogBox(Activity activity){        ProgressDialog dialogBox = new ProgressDialog(activity);        dialogBox.setProgressStyle(ProgressDialog.STYLE_SPINNER);        dialogBox.setTitle("不带进度条对话框");        dialogBox.setMessage("加载中~");        dialogBox.show();    }    /**     * 6.带进度条对话框     */    protected void progressDialogBox(Activity activity){        final ProgressDialog dialogBox = new ProgressDialog(activity);        //水平样式        dialogBox.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);        dialogBox.setTitle("进度条对话框");        dialogBox.setMessage("加载中~");        dialogBox.show();        //显示进度条进度        new Thread(new Runnable() {            @Override            public void run() {                // TODO Auto-generated method stub                for (int j = 0; j <= 100; j++) {                    try {                        Thread.sleep(200);                    } catch (InterruptedException e) {                        // TODO Auto-generated catch block                        e.printStackTrace();                    }                    dialogBox.setProgress(j);                }                //加载完毕,退出对话框                dialogBox.dismiss();            }        }).start();    }    /**     * 7.自定义布局对话框     */    protected void customLayoutDialogBox(final Activity activity){        final AlertDialog.Builder dialogBox = new AlertDialog.Builder(activity);        //创建一个view,并且将自定义布局对话框的布局加入view中       View view = View.inflate(activity,R.layout.custom_layout,null);       dialogBox.setView(view);        final Dialog dialog = dialogBox.create();        final EditText editText1 = view.findViewById(R.id.editText1);        final EditText editText2 = view.findViewById(R.id.editText2);        Button button1 = view.findViewById(R.id.button1);        Button button2 = view.findViewById(R.id.button2);        //设置监听器        button1.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Toast.makeText(activity,"退出",Toast.LENGTH_SHORT).show();                dialog.dismiss();            }        });        button2.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Toast.makeText(activity,"用户名:"+editText1.getText().toString()+" 密码:"+                        editText2.getText().toString(),Toast.LENGTH_SHORT).show();                dialog.dismiss();            }        });       dialog.show();    }    /**     * 8.自定义对话框     */    protected void customDialogBox(final Activity activity){        final CustomDialogBox dialogBox = new CustomDialogBox(activity);        dialogBox.setTitle("自定义对话框");        dialogBox.setContent("你要离开吗?");        dialogBox.setOnYesClick("确定", new CustomDialogBox.OnYesClickListener() {            @Override            public void confirm() {                Toast.makeText(activity,"点击了--确定--按钮",Toast.LENGTH_LONG).show();                dialogBox.dismiss();            }        });        dialogBox.setOnNoClick("取消", new CustomDialogBox.OnNoClickListener() {            @Override            public void cancel() {                Toast.makeText(activity,"点击了--取消--按钮",Toast.LENGTH_LONG).show();                dialogBox.dismiss();            }        });        dialogBox.show();    }    /**     * 9.日期对话框     */    @RequiresApi(api = Build.VERSION_CODES.N)    protected void dateDialogBox(final Activity activity){        //创建Calendar对象        Calendar calendar = Calendar.getInstance();        DatePickerDialog dialogBox = new DatePickerDialog(activity, new DatePickerDialog.OnDateSetListener() {            @Override            public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {                //显示选择的日期                /*                这里请大家注意,为什么月份是(month+1),因为month代表的是上年底与现在相差的月份数,                比如选择日期:1月15日,它与上年底相差的月份没有1个月,只有15天,那么month=0,                当日期:2月15,它与上年底相差的日子为1个月15天,那么month=1。                */                Toast.makeText(activity,year+"年 "+(month+1)+"月 "+dayOfMonth+"日",Toast.LENGTH_SHORT).show();            }            //刚打开日期对话框,默认选择当前日期        }, calendar.get(Calendar.YEAR),                calendar.get(Calendar.MONTH),                calendar.get(Calendar.DAY_OF_MONTH));        //显示日期对话框        dialogBox.show();    }    /**     * 10.时间对话框     */    @RequiresApi(api = Build.VERSION_CODES.N)    protected void timeDialogBox(final Activity activity){        //创建Calendar对象        final Calendar calendar = Calendar.getInstance();        TimePickerDialog dialogBox = new TimePickerDialog(activity, new TimePickerDialog.OnTimeSetListener() {            @Override            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {                //显示选择的时间                Toast.makeText(activity,hourOfDay+"点 "+minute+"分",Toast.LENGTH_SHORT).show();            }        },calendar.get(Calendar.HOUR),                calendar.get(Calendar.MINUTE),true);        //显示时间对话框        dialogBox.show();    }}

2.通过new一个DialogBox实例,分别调用各种对话框,当点击了相应的按钮,就实现相应的对话框

package com.example.homeworkfour;import android.os.Build;import android.os.Bundle;import android.view.View;import android.widget.Button;import androidx.annotation.RequiresApi;import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {    //定义全局变量    private Button button1, button2, button3, button4, button5, button6, button7,button8,button9,button10;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        final DialogBox dialogBox=new DialogBox();        //绑定控件并为按钮设置监听器        button1=findViewById(R.id.button1);        button1.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                dialogBox.ordinaryDialogBox(MainActivity.this);            }        });        button2=findViewById(R.id.button2);        button2.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                dialogBox.radioDialogBox(MainActivity.this);            }        });        button3=findViewById(R.id.button3);        button3.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                dialogBox.multipleDialogBox(MainActivity.this);            }        });        button4=findViewById(R.id.button4);        button4.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                dialogBox.listDialogBox(MainActivity.this);            }        });        button5=findViewById(R.id.button5);        button5.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                dialogBox.noProgressDialogBox(MainActivity.this);            }        });        button6=findViewById(R.id.button6);        button6.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                dialogBox.progressDialogBox(MainActivity.this);            }        });        button7=findViewById(R.id.button7);        button7.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                dialogBox.customLayoutDialogBox(MainActivity.this);            }        });        button8=findViewById(R.id.button8);        button8.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                dialogBox.customDialogBox(MainActivity.this);            }        });        button9=findViewById(R.id.button9);        button9.setOnClickListener(new View.OnClickListener() {            @RequiresApi(api = Build.VERSION_CODES.N)            @Override            public void onClick(View v) {                dialogBox.dateDialogBox(MainActivity.this);            }        });        button10=findViewById(R.id.button10);        button10.setOnClickListener(new View.OnClickListener() {            @RequiresApi(api = Build.VERSION_CODES.N)            @Override            public void onClick(View v) {                dialogBox.timeDialogBox(MainActivity.this);            }        });    }}

3.自定义对话框,就是利用重写Dialog实现自定义对话框

package com.example.homeworkfour;import android.app.Dialog;import android.content.Context;import android.os.Bundle;import android.view.View;import android.view.Window;import android.widget.Button;import android.widget.TextView;public class CustomDialogBox extends Dialog {    private TextView title, content;    private Button confirm, cancel;    private String titleStr, contentStr, confirmStr, cancelStr;    private Context mContext;    // 按钮监听器    private OnNoClickListener onNoClickListener;    private OnYesClickListener onYesClickListener;    public CustomDialogBox(Context context) {        super(context);        this.mContext = context;    }    public CustomDialogBox(Context context, int theme) {        super(context, theme);        this.mContext = context;    }    @Override    protected void onCreate(Bundle savedInstanceState) {        // TODO Auto-generated method stub        super.onCreate(savedInstanceState);        getWindow().requestFeature(Window.FEATURE_NO_TITLE);        //使用自定义的布局        setContentView(R.layout.custom_dialog);        init();        title.setText(titleStr);        content.setText(contentStr);        confirm.setText(confirmStr);        cancel.setText(cancelStr);        // 确认按钮        confirm.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View arg0) {                if (onYesClickListener != null) {                    onYesClickListener.confirm();                }            }        });        // 取消按钮        cancel.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View arg0) {                if (onNoClickListener != null) {                    onNoClickListener.cancel();                }            }        });    }    /*     * 初始化控件     */    private void init() {        title = (TextView) findViewById(R.id.title);        content = (TextView) findViewById(R.id.content);        confirm = (Button) findViewById(R.id.confirm);        cancel = (Button) findViewById(R.id.cancel);    }    /*     * 设置取消对话框的点击事件的监听接口     */    public interface OnNoClickListener {        public void cancel();    }    /*     * 设置确认对话框的点击事件的监听接口     */    public interface OnYesClickListener {        public void confirm();    }    /*     * 为外部设置监听部分     */    public void setOnYesClick(String str, OnYesClickListener onYesClickListener) {        if (str != null) {            this.confirmStr = str;        }        this.onYesClickListener = onYesClickListener;    }    public void setOnNoClick(String str, OnNoClickListener onNoClickListener) {        if (str != null) {            this.cancelStr = str;        }        this.onNoClickListener = onNoClickListener;    }    /**     * 为外界暴露方法,设置标题内容等     */    public void setTitle(String str) {        this.titleStr = str == null ? "" : str;    }    public void setContent(String str) {        this.contentStr = str == null ? "" : str;    }}

4.主界面的布局

<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".MainActivity">    <Button        android:id="@+id/button1"        android:layout_width="0dp"        android:layout_height="wrap_content"        android:layout_marginTop="2dp"        android:text="普通对话框"        android:textSize="15sp"        app:layout_constraintEnd_toEndOf="parent"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toTopOf="parent" />    <Button        android:id="@+id/button2"        android:layout_width="0dp"        android:layout_height="wrap_content"        android:layout_marginTop="5dp"        android:text="单选对话框"        android:textSize="15sp"        app:layout_constraintEnd_toEndOf="parent"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toBottomOf="@+id/button1" />    <Button        android:id="@+id/button3"        android:layout_width="0dp"        android:layout_height="wrap_content"        android:layout_marginTop="5dp"        android:text="多选对话框"        android:textSize="15sp"        app:layout_constraintEnd_toEndOf="parent"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toBottomOf="@+id/button2" />    <Button        android:id="@+id/button4"        android:layout_width="0dp"        android:layout_height="wrap_content"        android:layout_marginTop="5dp"        android:text="列表对话框"        android:textSize="15sp"        app:layout_constraintEnd_toEndOf="parent"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toBottomOf="@+id/button3" />    <Button        android:id="@+id/button5"        android:layout_width="0dp"        android:layout_height="wrap_content"        android:layout_marginTop="5dp"        android:text="不带进度条对话框"        android:textSize="15sp"        app:layout_constraintEnd_toEndOf="parent"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toBottomOf="@+id/button4" />    <Button        android:id="@+id/button6"        android:layout_width="0dp"        android:layout_height="wrap_content"        android:layout_marginTop="5dp"        android:text="带进度条对话框"        android:textSize="15sp"        app:layout_constraintEnd_toEndOf="parent"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toBottomOf="@+id/button5" />    <Button        android:id="@+id/button7"        android:layout_width="0dp"        android:layout_height="wrap_content"        android:layout_marginTop="5dp"        android:text="自定义布局对话框"        android:textSize="15sp"        app:layout_constraintEnd_toEndOf="parent"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toBottomOf="@+id/button6" />    <Button        android:id="@+id/button8"        android:layout_width="0dp"        android:layout_height="wrap_content"        android:layout_marginTop="5dp"        android:text="自定义对话框"        android:textSize="15sp"        app:layout_constraintEnd_toEndOf="parent"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toBottomOf="@+id/button7" />    <Button        android:id="@+id/button9"        android:layout_width="0dp"        android:layout_height="wrap_content"        android:layout_marginTop="5dp"        android:text="日期对话框"        android:textSize="15sp"        app:layout_constraintEnd_toEndOf="parent"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toBottomOf="@+id/button8" />    <Button        android:id="@+id/button10"        android:layout_width="0dp"        android:layout_height="wrap_content"        android:layout_marginTop="5dp"        android:text="时间对话框"        android:textSize="15sp"        app:layout_constraintEnd_toEndOf="parent"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toBottomOf="@+id/button9" /></androidx.constraintlayout.widget.ConstraintLayout>

5.自定义布局对话框的布局

<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent">    <TextView        android:id="@+id/message"        android:layout_width="0dp"        android:layout_height="wrap_content"        android:layout_marginStart="80dp"        android:layout_marginLeft="80dp"        android:layout_marginTop="40dp"        android:text="请填写信息"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toTopOf="parent" />    <EditText        android:id="@+id/editText1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginStart="50dp"        android:layout_marginLeft="50dp"        android:layout_marginTop="30dp"        android:ems="10"        android:hint="用户名"        android:inputType="textEmailAddress"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toBottomOf="@+id/message" />    <EditText        android:id="@+id/editText2"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginStart="50dp"        android:layout_marginLeft="50dp"        android:layout_marginTop="30dp"        android:ems="10"        android:hint="密码"        android:inputType="textEmailAddress"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toBottomOf="@+id/editText1" />    <Button        android:id="@+id/button1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginStart="60dp"        android:layout_marginLeft="60dp"        android:layout_marginTop="250dp"        android:text="取消"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toTopOf="parent" />    <Button        android:id="@+id/button2"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginStart="20dp"        android:layout_marginLeft="20dp"        android:layout_marginTop="250dp"        android:text="确定"        app:layout_constraintStart_toEndOf="@+id/button1"        app:layout_constraintTop_toTopOf="parent" /></androidx.constraintlayout.widget.ConstraintLayout>

6.自定义对话框的布局

<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/relativeLayout"    android:layout_width="match_parent"    android:layout_height="match_parent" >    <TextView        android:id="@+id/title"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginStart="50dp"        android:layout_marginLeft="50dp"        android:layout_marginTop="48dp"        android:text="TextView"        android:textSize="25sp"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toTopOf="parent" />    <TextView        android:id="@+id/content"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginStart="50dp"        android:layout_marginLeft="50dp"        android:layout_marginTop="30dp"        android:text="TextView"        android:textSize="20sp"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toBottomOf="@+id/title" />    <Button        android:id="@+id/cancel"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginStart="30dp"        android:layout_marginLeft="30dp"        android:layout_marginTop="160dp"        android:text="取消"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toTopOf="parent" />    <Button        android:id="@+id/confirm"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginStart="20dp"        android:layout_marginLeft="20dp"        android:layout_marginTop="160dp"        android:text="确定"        app:layout_constraintStart_toEndOf="@+id/cancel"        app:layout_constraintTop_toTopOf="parent" /></androidx.constraintlayout.widget.ConstraintLayout>

更多相关文章

  1. Python3原生编写月份计算工具
  2. 【Android开发】listview+popupwindow实践:日志列表
  3. 自定义弹窗的制作
  4. Android(安卓)用户界面---XML布局
  5. Android日记之2012\01\18
  6. Android流畅度优化
  7. Android(安卓)ApiDemo 系列解析【View->Button】
  8. 用两张图告诉你,为什么你的App会卡顿?
  9. Android(安卓)APP性能优化(最新总结)

随机推荐

  1. android进行异步更新UI的四种方式(转载)
  2. Android调用相机接口
  3. USER 版本与ENG 版本差异
  4. android 4.0 中出错 java.lang.Unsupport
  5. 利用makefile的语法功能,查看Android中And
  6. Android UI基础 仿闲鱼发布页
  7. Ubuntu 10.04安装android NDK
  8. Android中的度量单位
  9. ym—— Android(安卓)5.0学习之定义阴影
  10. Android Room VS GreenDao