Android dialog和popupwiondow的区别和用法

其中最本质的差别就是:AlertDialog是非阻塞式对话框:AlertDialog弹出时,后台还可以做事情;而PopupWindow是阻塞式对话框:PopupWindow弹出时,程序会等待,在PopupWindow退出前,程序一直等待,只有当我们调用了dismiss方法的后,PopupWindow退出,程序才会向下执行。这两种区别的表现是:AlertDialog弹出时,背景是黑色的,但是当我们点击背景,AlertDialog会消失,证明程序不仅响应AlertDialog的操作,还响应其他操作,其他程序没有被阻塞,这说明了AlertDialog是非阻塞式对话框;PopupWindow弹出时,背景没有什么变化,但是当我们点击背景的时候,程序没有响应,只允许我们操作PopupWindow,其他操作被阻塞。

(此段说明从网上技术文档看来的,自己没有代码尝试也没看源码,真实性无法确定)

 

PopupWindow的简单用法

1.创建

2.设置

3.显示

//创建
PopupWindow popupWindow = new PopupWindow(this);

//设置
popupWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
popupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);   
popupWindow.setContentView(LayoutInflater.from(this).inflate(R.layout.dialog_item01, null));
popupWindow.setOutsideTouchable(false);
popupWindow.setFocusable(true);
popupWindow.setTouchable(true);
popupWindow.setBackgroundDrawable(new ColorDrawable(Color.WHITE));

//显示在控件下面
popupWindow.showAsDropDown(buttonUseCar);
//显示父控件中的指定位置
popupWindow.showAtLocation(cl,Gravity.TOP | Gravity.LEFT, 0, 100);

首先,我们要明确一点,点击到弹窗上的touch事件是首先传递到弹窗上的,如果你设置了touchable为true,那么当前弹窗则会消耗掉touch事件,当前的activity则不会再收到touch事件,反之则会收到事件。

 

关于focusable的设置

foucsable设置为true,弹窗在弹出后就获取到了焦点,焦点的获取,就告诉设备,外部按键事件向哪里传递。如果弹窗获取到了焦点,此时点击外部按键,按键事件是直接传递给弹窗的。需要注意的是设置focusable为true,并不代表这个控件就获取到了焦点,而是表示可以获取焦点。


 

PopupWindow 设置点击外部区域不消失

https://blog.csdn.net/yh18668197127/article/details/84986793

 

_________________________________________分割线_____________________________________

 

自定义Dialog步骤请看我的另一篇博客

https://blog.csdn.net/yh18668197127/article/details/84982630

 


参考

https://www.jianshu.com/p/e588d74b5c9f

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值