ps:默认alertdialog的宽为屏幕的8/9, 高为屏幕的1/7!!

Dialog 常用方法:(格式:dialog.以下方法)

setProgressStyle:设置进度条风格,风格为圆形,旋转的。
setTitlt:设置标题
setMessage:设置提示信息;
setIcon:设置标题图标;
setIndeterminate:设置Dialog 的进度条是否不明确;这个属性对于ProgressDailog默认的转轮模式没有实际意义,默认下设置为true,它仅仅对带有ProgressBar的Dialog有作用。修改这个属性为false后可以实时更新进度条的进度。
setCancelable:设置Dialog 是否可以按返回键取消,屏蔽其它控件交互能力,除dialog以外的屏幕都不可点击;
cancelListner:当前Dialog强制取消之后将会被执行,通常用来清理未完成的任务。
setButton:设置ProgressDialog 的一个Button(需要监听Button事件);
show:显示Dialog。
cancel:删dialog
.setOnCancelListener(new Dial...):当删除dialog后执行该方法
dismiss: 删除progressdialog 作用和cancel相同
setOnDismissListener(new Dialo....):当删除dialog后执行该方法
setMax(int)、getMax:设置最大进度条的值
setProgress(int)、getProgress:更新进度条,当然一般都需要Handler的结合来更新进度条
incrementProgressBy(int)增加进度条
setProgressDrawable:设置progress发生变化时的进度指示条的背景图ps:AlertDialog.Builder没有setOnShowListener方法(对象名称为aertDialog),但想要该方法时,可以这样,
再创建dialog把alertDialog赋值给dialog:
Dialog dialog=aertDialog.create();
dialog.setOnShowListener(new DialogInterface.OnShowListener() {.....
然后在弹出dialog.show();即可。

几种类型的dialog的使用:

第一种:普通三个选项的dialog(最多可写三个按钮,也可写一个)
先上图

代码如下:

    //====弹窗//1.创建对象AlertDialog.Builder alertDialog=new AlertDialog.Builder(SafetyActivity.this);//2.设置窗体样式alertDialog.setIcon(R.drawable.ic_rb_user_red);//标题图标alertDialog.setTitle("三个选项的dialog");//标题文字alertDialog.setMessage("提示:爱或恨");//提示信息//alertDialog.setCancelable(false);//屏蔽其它控件交互能力,除dialog以外的屏幕都不可点击//3.设置三个按钮的事件//积极选择alertDialog.setPositiveButton("爱", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(SafetyActivity.this,"点击了爱",Toast.LENGTH_LONG).show();}});//消极选择alertDialog.setNegativeButton("恨", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(SafetyActivity.this,"点击了恨",Toast.LENGTH_LONG).show();}});//中立选择alertDialog.setNeutralButton("没感觉", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(SafetyActivity.this,"点击了没感觉",Toast.LENGTH_LONG).show();}});//4.显示dialogalertDialog.show();

第二种:列表dialog

.

    final String[] items={"我是1","我是2","我是3"};AlertDialog.Builder listDialog=new AlertDialog.Builder(SafetyActivity.this);listDialog.setIcon(R.drawable.ic_rb_user_red);listDialog.setTitle("列表dialog");listDialog.setItems(items, new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {//点击某一列的事件Toast.makeText(SafetyActivity.this,"点击了"+items[which],Toast.LENGTH_LONG).show();;}});listDialog.show();

第三种:单选dialog(和列表dialog差不多,只是在列表前面多了一个选择的图标)

    int choice=0;private void setViewEvenListener() {tvTest.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {final String[] items={"我是1","我是2","我是3"};AlertDialog.Builder singleChoiceDialog=new AlertDialog.Builder(SafetyActivity.this);singleChoiceDialog.setIcon(R.drawable.ic_rb_user_red);singleChoiceDialog.setTitle("单选dialog");//生成单选选项,并监听选项事件;ps:第二个参数为默认选中哪个列表(索引)singleChoiceDialog.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {//Toast.makeText(SafetyActivity.this,"点击了"+items[which],Toast.LENGTH_LONG).show();choice=which;}});//设置确定按钮singleChoiceDialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {//这里的which没意义,值为-1Toast.makeText(SafetyActivity.this,"点击了"+items[choice],Toast.LENGTH_LONG).show();}});singleChoiceDialog.show();}});}

第四种:多选dialog

    ArrayList<Integer> choice=new ArrayList<>();private void setViewEvenListener() {tvTest.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {final String[] items={"我是1","我是2","我是3"};boolean initChoices[]={false,false,false};//设置全部选择为falsechoice.clear();AlertDialog.Builder multiChoiceDialog=new AlertDialog.Builder(SafetyActivity.this);multiChoiceDialog .setIcon(R.drawable.ic_rb_user_red);multiChoiceDialog .setTitle("多选dialog");multiChoiceDialog.setMultiChoiceItems(items, initChoices, new DialogInterface.OnMultiChoiceClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which, boolean isChecked) {if(isChecked){choice.add(which);}else{choice.remove(which);}}});multiChoiceDialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {int size = choice.size();String str="";for (int i=0;i<size;i++){str+=items[choice.get(i)]+"、";}Toast.makeText(SafetyActivity.this,"选中了"+str,Toast.LENGTH_LONG).show();}});multiChoiceDialog.show();}});}

第五种:等待dialog

    final int max = 3;final ProgressDialog progressDialog = new ProgressDialog(SafetyActivity.this);progressDialog.setTitle("我是个等待的Dialog");progressDialog.setMessage("等待中");progressDialog.setCancelable(false);progressDialog.show();//新建线程执行关闭dialognew Thread(new Runnable() {@Overridepublic void run() {int p=0;while (p<max){try {Thread.sleep(1000);p++;} catch (InterruptedException e) {e.printStackTrace();}}progressDialog.cancel();}}).start();

第六种:有进度条的dialog

    final int max = 30;final ProgressDialog progressDialog = new ProgressDialog(SafetyActivity.this);progressDialog.setTitle("我是个有进度条的Dialog");progressDialog.setMessage("等待中");progressDialog.setIndeterminate(false);progressDialog.setCancelable(false);progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//进度条样式,参数写2效果相同progressDialog.setMax(max);//设置最大的进度条progressDialog.show();//新建线程执行关闭dialognew Thread(new Runnable() {@Overridepublic void run() {int p=0;while (p<max){try {Thread.sleep(100);p++;//更新进度条样式progressDialog.setProgress(p);} catch (InterruptedException e) {e.printStackTrace();}}progressDialog.cancel();}}).start();

第七种:半自定义dialog

    AlertDialog.Builder alertDialog=new AlertDialog.Builder(SafetyActivity.this);alertDialog.setTitle("半自定义的dialog");alertDialog.setPositiveButton("哈哈哈", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(SafetyActivity.this,"点击了哈哈哈",Toast.LENGTH_LONG).show();}});//===当想自定义dialog的一些样式(宽高、弹出位置)//1.获取dialogAlertDialog dialog=alertDialog.create();//2.获取Dialogwindow对象Window window=dialog.getWindow();//3.获取到window管理器WindowManager manager=getWindowManager();//4.获取屏幕参数Display display=manager.getDefaultDisplay();//5.添加参数WindowManager.LayoutParams params=window.getAttributes();params.height= (int) (display.getHeight()*0.4);//设置dialog的高params.width=(int) (display.getWidth()*0.6);//设置dialog的宽/*设置全屏(setBackgroundDrawableResource:不设置背景颜色咋不能全屏呢。。。)window.setBackgroundDrawableResource(R.color.colorWhite);params.width = WindowManager.LayoutParams.MATCH_PARENT;params.height = WindowManager.LayoutParams.MATCH_PARENT;* */params.gravity= Gravity.TOP;//弹出位置params.alpha=0.8f;//6.window设置参数window.setAttributes(params);//显示dialog.show();

第八种:自定义dialog,添加布局文件:

    AlertDialog.Builder alertDialog=new AlertDialog.Builder(SafetyActivity.this);alertDialog.setTitle("自定义的dialog,加载布局文件");alertDialog.setView(R.layout.test);//添加布局文件alertDialog.setPositiveButton("哈哈哈", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(SafetyActivity.this,"点击了哈哈哈",Toast.LENGTH_LONG).show();}});alertDialog.show();

ps:若想只加载布局文件,把那句代码改为如下:(ps:如果不需要头部信息,可不设置setTitle)
AlertDialog.Builder alertDialog=new AlertDialog.Builder(SafetyActivity.this,R.style.DialogTheme);
R.style.DialogTheme:指的是:它可以设置dialog的样式

在values/styles.xml新建一个样式DialogTheme,代码如下:

    <!--parent="@android:style/Theme.Dialog":点击dialog之外的界面就会关闭dialog--><style name="DialogTheme"  parent="@android:style/Theme.Dialog"><!-- 边框 --><item name="android:windowFrame">@null</item><!-- 是否浮现在activity之上 --><item name="android:windowIsFloating">true</item><!-- 半透明 --><item name="android:windowIsTranslucent">true</item><!-- 无标题 --><item name="android:windowNoTitle">true</item><item name="android:background">@android:color/transparent</item><!-- 背景透明 --><item name="android:windowBackground">@android:color/transparent</item><!-- 模糊 --><item name="android:backgroundDimEnabled">true</item><!-- 遮罩层透明度 --><item name="android:backgroundDimAmount">0.5</item></style>

第九种:完全自定义dialog
步骤一:先写一个需求需要的布局文件(例如下:名称为:test)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/colorPrimary"android:orientation="vertical"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="@color/colorWhite"android:text="dialog测试,这青色背景是布局文件"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="@color/colorWhite"android:text="dialog测试,这青色背景是布局文件"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="@color/colorWhite"android:text="dialog测试,这青色背景是布局文件"/></LinearLayout>

步骤二:写一个类继承dialog

public class TestDialog extends Dialog {//ps:!!!因为继承dialog,所以,在该类的方法里写dialog的方法即可(例:dismiss()),不用dialog.dismiss();public TestDialog(@NonNull Context context) {//如果要设置dialog占满宽或高,super里一定要添加R.style.DialogTheme,//否则params.width或params.height设置占满是没有效果的super(context,R.style.DialogTheme);}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//设置布test局setContentView(R.layout.test);//=======设置关于dialog的样式,这样式也可以在创建TestDialog对象时那里写Window window=getWindow();//也可这样写:dialog.getWindow();//dialog显示的位置window.setGravity(Gravity.BOTTOM);//dialog的大小//window.getDecorView().setPadding(50,0,50,50);//dialog的动画(R.style.dialog_menu_animStyle:自定义的动画)window.setWindowAnimations(R.style.dialog_menu_animStyle);//设置参数WindowManager.LayoutParams params=window.getAttributes();params.width=WindowManager.LayoutParams.MATCH_PARENT;params.height=WindowManager.LayoutParams.WRAP_CONTENT;}
}

步骤三:在需要弹出该dialog的地方,使用自定义的dialog

                //==使用dialogTestDialog testDialog=new TestDialog(SafetyActivity.this);testDialog.show();

第十种:日期:

      Calendar calendar=Calendar.getInstance();//参1:当前上下文,参2日期改变监听,参3设置显示的年,参4设置显示的月(0-11代表1-12月),参5设置显示的日new DatePickerDialog(SafetyListActivity.this, new DatePickerDialog.OnDateSetListener() {@Override//参2为改变后的年,参3月,参4日public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {//日期改变事件Toast.makeText(SafetyListActivity.this,String.valueOf(year)+String.valueOf(month+1)+String.valueOf(dayOfMonth),Toast.LENGTH_LONG).show();}}, calendar.get(Calendar.YEAR) ,calendar.get(Calendar.MONTH) , calendar.get(Calendar.DAY_OF_MONTH)).show();

自定义dialog弹出和退出的动画

步骤一:在anim层(anim层时res层下的,是专门放动画的文件夹,第一次需要创建该文件夹,具体创建百度)
新建dialog_in_anim.xml文件做弹出过程,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:duration="500"android:fromXDelta="0%p"android:toXDelta="0%"android:fromYDelta="100%p"android:toYDelta="0" /></set>
步骤二:再新建一个退出过程的xml,名为dialog_out_anim
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:duration="500"android:fromXDelta="0"android:fromYDelta="0%p"android:toXDelta="0"android:toYDelta="100%p" />
</set>
步骤三:在values层的styles.xml添加显示过程和退出过程的样式(dialog_menu_animStyle:样式名称,
可根据需求起)
    <style name="dialog_menu_animStyle"><item name="android:windowEnterAnimation">@anim/dialog_in_anim</item><item name="android:windowExitAnimation">@anim/dialog_out_anim</item></style>
步骤四:使用dialog_menu_animStyle这个动画:例:在上面第九种dialog知识里有写
     Window window=getWindow();//也可这样写:dialog.getWindow();//dialog的动画(R.style.dialog_menu_animStyle:自定义的动画)window.setWindowAnimations(R.style.dialog_menu_animStyle);

Dialog 对话框相关推荐

  1. android 之Dialog的多种Dialog对话框(以及反射在自定义对话框的运用)

    实际效果: 实例代码: 一个"启动初始Activity.xml" 一个弹出的Activity 业务逻辑代码: package com.hsj.example.alertdialog ...

  2. elementUi Dialog 对话框使用中数据获取问题

     Dialog 对话框:使用中数据获取问题 演示代码:  <div class="centerContent"><ul><li class=" ...

  3. Angular实现dialog对话框封装

    Angular实现dialog对话框封装 为什么要封装? 对于Angular Material UI库中的dialog组件,实在不是很好用,所以打算简单封装一下啊. 直接代码吧. 封装dialog组件 ...

  4. dialog对话框初始化 mfc_MFC添加子对话框及如何初始化

    一.建立子对话框 1.建立一个基于对话框的MFC工程 2.在资源视图中右键单击.rc文件,然后选择添加添加资源->Dialog 3.第二步新建的Dialog对话框中默认的会有确认和取消两个按钮( ...

  5. 【前端】Vue+Element UI案例:通用后台管理系统-用户管理:Form表单填写、Dialog对话框弹出

    文章目录 目标 代码 0.页面结构 1.新增按钮和弹出表单:结构 2.新增按钮和弹出表单:点击新增弹出表单 3.表单样式 4.表单验证 5.表单的提交和取消功能:接口.mock相关准备 6.表单的提交 ...

  6. vue 只要一杯卡布奇诺时间,就能简单上手的Dialog对话框

    来,效果图 文件结构 首先,你在vue的项目里面,找个合适的位置创建一个文件夹,创建一个vue的文件以及一个js文件 代码如下: myDialog.vue  <template><d ...

  7. Acitivity(页面)之间的跳转,ProgressBar 进度条,PopupWindow 弹出框,Dialog 对话框,Spinner下拉框

    Acitivity(页面)之间的跳转 Acitivity(页面)之间的跳转需要使用到 Intent(意图) Intent intent = new Intent(MainActivity.this(从 ...

  8. 去除 element-ui 中 Dialog 对话框遮罩层的方法

    在使用element-ui的Dialog时,默认会有遮罩层,想要去除遮罩层,官方文档给出了 modal 属性: modal 是一个布尔值,表示是否需要遮罩层: 然而,将 modal 赋值为 false ...

  9. 弹出Dialog对话框5.18

    点击相应按钮,弹出Dialog对话框.首先为该按钮绑定一个单击事件,然后在methods中对该函数事件进行处理. 先对要弹出的对话框进行简单的处理. 该对话框默认是隐藏状态,所以在data中默认set ...

  10. C# dialog对话框

    C# dialog对话框 1.保存文件 SaveFileDialog sdlg = new SaveFileDialog(); sdlg.RestoreDirectory = true; //格式 文 ...

最新文章

  1. redis未能启动服务器,redis服务启动不了的解决办法(服务器应非法关机了)
  2. 手把手教你搭建微信点餐系统环境(springmvc+ibatis+maven+git)
  3. Spring Security and Shiro
  4. COMMAND 模式
  5. 共享文件服务器迁移,服务器共享文件夹迁移
  6. 小程序下的兼容性问题
  7. Linux下的vim编辑器与gcc编译器及静动态库的制作
  8. Debug Assertion Failed!
  9. java虚拟机内存模型种类_深入理解volatile类型——从Java虚拟机内存模型角度
  10. cad画直角命令_炸了,CAD fro命令配合tk命令,极轴追踪无敌!
  11. 软考网络管理员学习笔记3之第三章网络体系结构
  12. 四川专科学校排名四川计算机,四川省现代计算机职业学院2020年排名
  13. enq: TT - contention等待事件
  14. mysql 查看表格scott_在mysql中创建 oracle scott 用户的四个表及插入初始化数据
  15. python的turtle库画苹果
  16. java 软件分析_优化、分析Java源代码的11款软件工具
  17. win10系统hp笔记本开机黑屏一段时间解决方法
  18. (附源码)基于PHP二手服装网站 毕业设计 201711
  19. Java Web 后续(三)
  20. 一对一python培训班多少钱

热门文章

  1. 安卓查看中文官网、API、安卓文档
  2. 【html】屏蔽浏览器自带的输入提示
  3. 《Vue3+TS》开发一个自己的起始页
  4. redhat,FC5,CentOS你装上了吗? 超简单硬盘安装redhat,FC5和CentOS
  5. 宏碁 (ACER) TravelMate P449-G2-MG安装Win7系统
  6. 计算机cpu频率时钟周期,关于cpu:什么是时钟周期和时钟速度?
  7. html图片自动适应窗口大小,使用CSS自动调整浏览器大小的图片大小
  8. 【Windows】32位和64位区别
  9. Ruby on rails 实战圣经: 深度剖析环境设定与Bundler
  10. 《 线性代数及其应用 (原书第4版)》——1.5 线性方程组的解集