按钮显示PopupWindow,setOutsideTouchable(true)时,点击按钮再次打开的问题
先给大家看看这个:http://www.makaidong.com/%E5%8D%9A%E5%AE%A2%E5%9B%AD%E7%9F%A5%E8%AF%86%E5%BA%93/21462.shtml
可以说我也是受到了一点这个的启发,虽然我的思路和这很不一样,记录下。
我没有去试上面的方法,但看着应该也可以,但是我觉得不太妥,所以没有用,大家想法不一样,所以也贴上给大家看看,同时也感谢大神的提醒。
同求有更多,更好想法的人相互分享!!
ok,废话不多说,进入正题:
问题是这样,我在界面的个button,点击显示一个PopupWindow,需求是需要点击它之外的地方让它消失,我相信这也是很多用到它的人的共同需求,(另说一句,一查就能查到的,要setOutsideTouchable(true)有效果,还需要给PopupWindow设置背景)。可是我还想,当我再次点击这个button时PopupWindow能消失,可是实际的效果是,当PopupWindow显示时,点button,PopupWindow就消失了,这时button的click事件还会响应,并且判断PopupWindow为没有显示,所以会再次把PopupWindow打开。
我的解决方法是,在显示PopupWindow的Activity重写dispatchTouchEvent(MotionEvent ev)方法,然后取消到PopupWindow的outside监听,这时,点击PopupWindow之外是不会消失的,但是我可以在Activity的dispatchTouchEvent(MotionEvent ev)方法监听到,在这里,我判断如果PopupWindow显示着,就关了它,并返回true,让这次的点击事件不再传到下面,也就是说,当再次点那个button时,其实这个button的click事件并没有执行,但是PopupWindow关了,效果达成,上代码:
public boolean dispatchTouchEvent(MotionEvent ev) {
if (popupWindow != null && popupWindow.isShowing()) {
popupWindow.dismiss();
return true;
}
return super.dispatchTouchEvent(ev);
}
对了,再说一句,当点击PopupWindow里的内容时,dispatchTouchEvent()是不会监听的。。。
按钮显示PopupWindow,setOutsideTouchable(true)时,点击按钮再次打开的问题的更多相关文章
- 原生JS实现点击一个按钮显示一个div,再点击按钮div隐藏,或点击除div外其它空白处div隐藏
<!DOCTYPE html> <html style="font-size: 24px"> <head> <title>js点击按 ...
- js实现点击按钮时显示弹框,点击按钮及弹框以外的区域时隐藏弹框
转自https://blog.csdn.net/yimawujiang/article/details/86496936 问题:js实现点击按钮时显示弹框,点击按钮及弹框以外的区域时隐藏弹框? 方案一 ...
- Java基础 awt Button 点击按钮后在控制台输出文字
JDK :OpenJDK-11 OS :CentOS 7.6.1810 IDE :Eclipse 2019‑03 typesetting :Markdown code ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:用于要弹出信息的按钮
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- React 点击按钮显示div与隐藏div,并给div传children
最近做了一个react的点击按钮显示与隐藏div的一个小组件: [筛选]组件FilterButton import React,{Component} from 'react'; import {re ...
- Android点击View显示PopupWindow,再次重复点击View关闭PopupWindow
Android点击View显示PopupWindow,再次重复点击View关闭PopupWindow 这本身是一个看似很简单的问题,但是如果设置不当,就可能导致莫名其妙失效问题.通常在Andro ...
- 修改XPMenu让ToolButton在Down=True时正确显示
XPMenu是一个不错的程序界面效果控件,但它也存在不少不足之处.我最近又对它作了一点修改. 原因是我在程序里有一个ToolButton,其Style=tbsButton,当Down=True时,XP ...
- 安卓TextView限定行数最大值,点击按钮显示所有内容
问题展示 如上图所示,在普通的TextView中,要求: 最多显示3行 超过三行显示展开按钮 且点击展开按钮显示完整内容 这个需求看似简单,但解决起来会遇到两个较为棘手的问题:1,如何判断是否填满了前 ...
- [C# 基础知识系列]专题五:当点击按钮时触发Click事件背后发生的事情 (转载)
当我们在点击窗口中的Button控件VS会帮我们自动生成一些代码,我们只需要在Click方法中写一些自己的代码就可以实现触发Click事件后我们Click方法中代码就会执行,然而我一直有一个疑问的—— ...
随机推荐
- SpringMVC源码剖析(四)- DispatcherServlet请求转发的实现
SpringMVC完成初始化流程之后,就进入Servlet标准生命周期的第二个阶段,即“service”阶段.在“service”阶段中,每一次Http请求到来,容器都会启动一个请求线程,通过serv ...
- c++防止客户端多开巧妙代码
在读OBS源码时看到一个比较有意思的关于防止用户多开程序的写法,简单有效,记录下 //make sure only one instance of the application can be ope ...
- python中应用*args 与**kwargs
这是Python函数可变参数 args及kwargs------->目的是:当函数的参数不确定时,可以使用*args 和**kwargs,*args 没有key值,**kwargs有key值. ...
- laravel5.3----------调度任务以及Artisan
1.在使用的过程中会遇到有些函数不能用需要在php配置文件里面打开: disable_functions = exec,passthru,popen,proc_open,shell_exec,syst ...
- ferret不能创建txt文本--cookiecadger截获不到包
终于解决了-- 虽然是通宵 又是隔了一天 .但还是解决了. 要/proc/sys/net/ipv4/ip_forward =1 echo 1 > /proc/sys/net/ipv4/ip_ ...
- Fiddler的一些坑: !SecureClientPipeDirect failed: System.IO.IOException
手机的请求Fiddler可以捕捉,但是手机一直无法上网,在logs中看到的日志如下: !SecureClientPipeDirect failed: System.IO.IOException 由于远 ...
- jQuery.serialize() 函数详解////////////z
serialize()函数用于序列化一组表单元素,将表单内容编码为用于提交的字符串. serialize()函数常用于将表单内容序列化,以便用于AJAX提交. 该函数主要根据用于提交的有效表单控件的n ...
- sqlserver中DATE类型的数据转化 CONVERT
主要描述的是SQL Server使用convert取得datetime日期数据的实际操作流程,在实际操作中用SQL Server数据库中用convert来获取datetime日期数据,以下实例包含各种 ...
- PHP日常开发工具-Sublime应用
工欲善其事,必先利其器.这里我推荐Sublime Text3做为PHP编辑器,以下简称为ST3,因为不仅系统资源占用小.打开快速,并且还有如下优点: 插件多,类似Emmet信手拈来,非常顺手. UI很 ...
- final发布视频
final版本发布的视频已上传至秒拍,视频地址: http://m.miaopai.com/show/channel/AHqv~VA7lrk144ONLWrveQ__ 以下是功能截图: ...