1.两者相同点

1.1 都可以设置对话框
1.2 都可以设置呈现各种弹窗样式

2.两者区别

本质区别:

Dialog是非阻塞式对话框,AlertDialog弹出时后台还可以做其他事情;
popupwindow是阻塞式对话框,popupwindow弹出时程序会等待,在popupwindow结束前程序会一直等待,当调用dismiss方法后popupwindow弹窗关闭程序才向下进行

其他区别:
1.Pop在显示之前必须设置宽高,Dialog无限制
2.点击back的时候,Dialog会消失,Pop默认会响应(除非设置popup.setFocusable(true))
3.Pop默认不会给页面其他部分添加蒙层,而Dialog默认有蒙层
4.PopupWindow没有标题,Dialog默认有标题
5.二者显示的时候都要设置Gravity。如果不设置,Dialog默认是Gravity.CENTER
6.二者都有默认的背景,都可以通过setBackGroundDrawable(new ColorDrawable(android.R.color.transparent))设置透明
7.Dialog通过show()显示弹窗;Pop通过showAtLocation()弹窗

3.代码实现

Dialog实现底部弹窗

public class BottomDialog extends Dialog implements View.OnClickListener {private Context context;private TextView tvCall;private String name;private String phone_number;private TextView tv_contact_customer;private TextView tv_cancel;public BottomDialog(@NonNull Context context, String name, String phone_number, @StyleRes int themeResId){super(context, themeResId);this.context = context;this.name = name;this.phone_number = phone_number;}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.layout_contact_phone_dialog);//弹窗布局if (this.getWindow() != null) {WindowManager.LayoutParams layoutParams = getWindow().getAttributes();layoutParams.gravity = Gravity.BOTTOM;//底部弹出layoutParams.width = RelativeLayout.LayoutParams.MATCH_PARENT;layoutParams.height = RelativeLayout.LayoutParams.WRAP_CONTENT;getWindow().getDecorView().setPadding(0, 0, 0, 0);getWindow().setAttributes(layoutParams);//getWindow().setWindowAnimations(R.style.DialogAnimation);//view中添加动画}tvCall = findViewById(R.id.call_service);tv_contact_customer = findViewById(R.id.tv_contact);tv_cancel = findViewById(R.id.tv_close);tv_cancel.setOnClickListener(this);tv_contact_customer.setOnClickListener(this);tvCall.setOnClickListener(this);}@Overridepublic void onClick(View view) {if (view.getId() == R.id.call_service) {if (onCallSalesListener != null) {onCallSalesListener.onCallSalesman();}}if (view.getId() == R.id.tv_contact) {if (onCallSalesListener != null) {onCallSalesListener.onContactCustomerService();}}if (view.getId() == R.id.tv_close) {dismiss();}}//监听接口public interface OnCallSalesListener {void onCallSalesman();void onContactCustomerService();}private OnCallSalesListener onCallSalesListener;public void setOnCallSalesListener(OnCallSalesListener onCallSalesListener) {this.onCallSalesListener = onCallSalesListener;}}

调用:

 BottomDialog bottomDialog = new BottomDialog(this, "王老五","110", R.style.AlertDialogStyle);bottomDialog.show();

popupwindow实现底部弹窗

public class BottomPopWindow extends PopupWindow implements View.OnClickListener{private View mMenuView;//文本信息private TextView tv_prompt_info;private final RelativeLayout rl_close;private final TextView tv_close;public BottomPopWindow(final Context context) {super(context);mMenuView = View.inflate(context,R.layout.layout_bottom_pop,null);//提示信息内容tv_prompt_info = mMenuView.findViewById(R.id.tv_info);rl_close = mMenuView.findViewById(R.id.rl_close);rl_close.setOnClickListener(this);tv_close = mMenuView.findViewById(R.id.tv_close);tv_close.setOnClickListener(this);tv_prompt_info.setText("寒塘渡鹤影,冷月葬花魂");tv_prompt_info.setHighlightColor(context.getResources().getColor(android.R.color.transparent));//设置SelectPicPopupWindow的Viewthis.setContentView(mMenuView);//设置布局//设置弹出窗体的宽和高this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);this.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);//返回键可点击this.setFocusable(true);//外部可点this.setOutsideTouchable(true);//弹出窗体的背景this.setBackgroundDrawable(new ColorDrawable(0xAA000000));//动画效果this.setAnimationStyle(R.style.DialogAnimation);//弹窗dismiss时调用this.setOnDismissListener(new OnDismissListener() {@Overridepublic void onDismiss() {//弹窗结束的收尾工作...}});}@Overridepublic void onClick(View v) {if (v.getId()==R.id.rl_close || v.getId()==R.id.tv_close ){dismiss();}}
}

调用:

 BottomPopWindow bottomDialog = new BottomPopWindow(this);bottomDialog.showAtLocation(findViewById(R.id.llParent), Gravity.BOTTOM, 0, 0);

popupwindow和dialog的对比相关推荐

  1. PopupWindow和Dialog区别,妈妈再也不用担心我找工作了!

    前言 伟人曾经说过: 书是人类进步的阶梯 书中自有黄金屋,书中自有颜如玉 读书破万卷,下笔如有神 书是唯一不死的东西. 书籍是伟大的天才留给人类的遗产. 最近有很多朋友在我的公众号上提问"A ...

  2. PopupWindow和Dialog区别,手慢无

    前言 最近在网上看许多面经的文章,有拿到Offer的,也有凉凉的,这些文章中都有一个共同的特点,就是单单的只有面试题目.而没有面试过程中需要注意的细节和面试心得.导致有些面试者们在面试来临,就去盲目的 ...

  3. Dialog和PopupWindow的区别

    Android中的对话框有多种:Toast,OptionsMenu,PopupWindow和Dialog.它们都可以实现弹窗功能,但是他们之间有一些差别,下面我们先对比Dialog和PopuWindo ...

  4. android弹窗闪退,[Android 小记] PopupWindow中放置Spinner 点击直接闪退的问题分析

    错误原因:android.view.WindowManager$BadTokenException: Unable to add window -- token android.view.ViewRo ...

  5. Dialog源码分析

    目录介绍 1.简单用法 2.AlertDialog源码分析 2.1 AlertDialog.Builder的构造方法 2.2 通过AlertDialog.Builder对象设置属性 2.3 build ...

  6. Android应用Activity、Dialog、PopWindow、Toast窗体加入机制及源代码分析

    [工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处.尊重劳动成果] 1 背景 之所以写这一篇博客的原因是由于之前有写过一篇<Android应用setCont ...

  7. 红橙Darren视频笔记 万能Dialog builder设计模式

    1.Android原生的AlertDialog 我们今天看一下AlertDialog的创建方式以及它使用到的builder设计模式 我们先看看原生Android的AlertDialog创建方式: Al ...

  8. Android中Dialog的使用

    上一篇博文讲到对话框popWindow的使用,这篇博文主要解说Dialog的使用. 1.什么是Dialog? Dialog就是对话框的一种方式! 在Android开发中.我们常常会须要在Android ...

  9. 拒绝无用功,封装一个通用的PopupWindow

    作者: 夏至,欢迎转载,但请保留这段申明,谢谢 https://juejin.im/post/5961e03e51882568b13c3308 为了避免重复造轮子,我们一般都会封装一个通用的控件,比如 ...

最新文章

  1. 和csm_假面骑士ooo十周年纪念向csm周边 核心硬币和收纳盒再版
  2. Android数据存储——2.文件存储_C_DOM解析XML文档
  3. 组件化实践详解(二)
  4. ORA-12519: TNS: 没有找到适用的服务处理
  5. java中循环语句_Java语法基础之循环结构语句详解
  6. (error) ERR wrong number of arguments for 'hmget' command
  7. ]解决在XP上sqlserver2005客户端安装的问题
  8. 部署项目的问题(一)—— vue工程打包上线样式错乱问题
  9. shell比较运算符
  10. 排序算法lowb三人组-插入排序
  11. LeetCode 545. Boundary of Binary Tree 二叉树边界
  12. qtcreator下拉列表怎么制作_如何用WPS制作月度记账表
  13. 交通灯keil程序加2位数码管_十字路口交通灯控制Keil编写
  14. 第1章-确定superboot210如何为smart210的nand flash进行的分区划分
  15. drupal与html转换,HTML转Drupal主题的方法
  16. 倒数15日开幕!第八届全球云计算大会解锁主论坛重磅嘉宾
  17. Android 时间格式化
  18. java架构师全套图解,使用/教程/实例
  19. python处理pdf文件的程序_Python处理PDF文档-拆分合并
  20. linux摄像头拍照程序,Android开发:Camera初探——控制摄像头拍照

热门文章

  1. PowerSploit PowerUp模块提权
  2. linux创建新账号命令,linux创建用户命令
  3. 国产软硬件龙芯系列迅为2K1000开发板配置 nand flash
  4. 无法启动 C/C++ 语言服务器。IntelliSense 功能将被禁用。错误: Missing binary at c:\Users\MSI-NB\.vscode\extensions\ms-vsc
  5. UML-综合实例-网上书店
  6. 「建模学习」Zbrush中凹凸贴图、法线贴图和置换贴图的区别
  7. MySQL优化三:查询性能优化之基础部分
  8. IT男的一次中年破局尝试--出书
  9. centos 中svn服务的启动、关闭、重启, 以及添加开机启动
  10. python2实现模拟登陆UESTC信息门户