先给大家看看这个: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)时,点击按钮再次打开的问题的更多相关文章

  1. 原生JS实现点击一个按钮显示一个div,再点击按钮div隐藏,或点击除div外其它空白处div隐藏

    <!DOCTYPE html> <html style="font-size: 24px"> <head> <title>js点击按 ...

  2. js实现点击按钮时显示弹框,点击按钮及弹框以外的区域时隐藏弹框

    转自https://blog.csdn.net/yimawujiang/article/details/86496936 问题:js实现点击按钮时显示弹框,点击按钮及弹框以外的区域时隐藏弹框? 方案一 ...

  3. Java基础 awt Button 点击按钮后在控制台输出文字

        JDK :OpenJDK-11      OS :CentOS 7.6.1810      IDE :Eclipse 2019‑03 typesetting :Markdown   code ...

  4. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:用于要弹出信息的按钮

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  5. React 点击按钮显示div与隐藏div,并给div传children

    最近做了一个react的点击按钮显示与隐藏div的一个小组件: [筛选]组件FilterButton import React,{Component} from 'react'; import {re ...

  6. Android点击View显示PopupWindow,再次重复点击View关闭PopupWindow

     Android点击View显示PopupWindow,再次重复点击View关闭PopupWindow 这本身是一个看似很简单的问题,但是如果设置不当,就可能导致莫名其妙失效问题.通常在Andro ...

  7. 修改XPMenu让ToolButton在Down=True时正确显示

    XPMenu是一个不错的程序界面效果控件,但它也存在不少不足之处.我最近又对它作了一点修改. 原因是我在程序里有一个ToolButton,其Style=tbsButton,当Down=True时,XP ...

  8. 安卓TextView限定行数最大值,点击按钮显示所有内容

    问题展示 如上图所示,在普通的TextView中,要求: 最多显示3行 超过三行显示展开按钮 且点击展开按钮显示完整内容 这个需求看似简单,但解决起来会遇到两个较为棘手的问题:1,如何判断是否填满了前 ...

  9. [C# 基础知识系列]专题五:当点击按钮时触发Click事件背后发生的事情 (转载)

    当我们在点击窗口中的Button控件VS会帮我们自动生成一些代码,我们只需要在Click方法中写一些自己的代码就可以实现触发Click事件后我们Click方法中代码就会执行,然而我一直有一个疑问的—— ...

随机推荐

  1. Android 基于Android的手机邮件收发(JavaMail)之一(准备工作)

    界面一共是五个界面,分别是welcomeActivity,ReceiveAndSendActivity,ReceiveListActivity,SendMailActivity,MailDetails ...

  2. 使用git版本控制器C#工程,git托管到GitHub和visual studio on line

    类比TFS, 托管到了VS online,为私有.GitHub上托管的代码为开源. 新建工程选择版本控制器"Git" VS online: 本地: GitHub,下载github ...

  3. js瀑布流(定位法)

    1.首先,自己写好图片路径,引入jquery <!DOCTYPE html> <html> <head> <meta charset="utf-8& ...

  4. ASP.NET MVC EF 中使用异步控制器

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精   为什么使用异步操作/线程池 ASP.NET MVC ...

  5. 【C#进阶】多播委托和委托数组像是一回事~

    这个MathOperation类有三静态方法,参数都是double,并且没有返回值,考虑用Action<>() 这种预定义的委托哦 class MathOperations { publi ...

  6. c#字符显示转换{0:d}

    C#:String.Format数字格式化输出 : int a = 12345678; //格式为sring输出// Label1.Text = string.Format("asdfads ...

  7. 3.MongoDB下Windows下的安装

    由于博主目前使用的是Windows的系统,没有使用Linux等其它的系统,因此此安装配置和开发使用,均是在Windows下进行的,以后在使用其它的系统的时候,再将其它系统的配置的使用补充上来. 1.下 ...

  8. 横向不间断滚动DIV

    横向不间断滚动DIV,5个一组,js控制,自动生成任意组显示 <!DOCTYPE html> <html> <head> <meta http-equiv=& ...

  9. CoreData 数据模型的版本控制

    CoreData 数据模型的版本控制 在项目中选择数据模型,然后选择Editor | Add Model Version 通过属性栏的ModelVersion current 选项进行版本的选择控制. ...

  10. C语言 03 项目团队文件合并

    团体项目中 链接把项目中所有相关联的.O目标文件.C语言函数库合并在一起,生成可执行文件. 编写声明文件,用 .h文件封装起来,在其他代码中用include"xxx.h"引用声明 ...