点击PopupWindow弹出窗口之外的区域关闭该窗口的方法

Qt实现点击其他位置关闭弹出窗口 在上述代码中,我们在主窗口的createUI()函数中创建了一个QPushButton,并连接了它的clicked信号到主窗口的showPopupWindow()槽函数。下面是一个示例代码,演示了如何创建主窗口和弹出窗口,并在点击其他位置时关闭弹出窗口。在PopupWindow的mousePressEvent()函数中,我们捕获了鼠标点击事件,判断点击位置是否在弹出窗口内部,如果不是,则关闭弹出窗口。这个窗口将作为弹出窗口。这样,当你点击弹出窗口以外的区域时,弹出窗口将会关闭。 阅读详情

之前做了一个弹出窗口使用alertdialog来实现的,效果很不错google都给加了特效,如窗口的边框,窗口的标题以及后面activity的蒙灰,然后用返回键关闭,原本都做好了可是需求忽然变了,想要加一个关闭按钮,可是alertdialog的title位置挡着,没办法在右上角加一个title,如图 ,所以想了一个新的交互方式,点击窗口之外来关闭窗口,可是查了好久发现google根本没提供一个全屏的对象,无法获取除了这个alertdialog之外界面的点击事件,于是经过多方研究发现了另一个弹出窗口popupwindow,这个东西的确不错,下面来讲一下这个东西的实现方法。View popupWindow_view = getLayoutInflater().inflate(R.layout.detailinfo, null,false);   
popupWindow = new PopupWindow(popupWindow_view, 300, 200, true);
popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(false);
popupWindow.showAtLocation(findViewById(R.id.Detail), Gravity.CENTER, 0, 0);  
这个popupwindow的实现方法大家可以上网上找,很多实例我就不详细说了,大概就是上面这几行代码,其他的按钮什么的用
popupWindow.findviewbyid()就能获取到,进行onclick事件就行,这里面主要有用的是

popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(false);这两行,当你吧这两行写上之后,你会发现后面的界面你也是可以点击的,而不是像alertdialog那样将后面的pause了,然后再修改onTouchEvent方法

public boolean onTouchEvent(MotionEvent event) {
   // TODO Auto-generated method stub
   if (popupWindow != null && popupWindow.isShowing()) {
   popupWindow.dismiss();
   }
   return super.onTouchEvent(event);
}

这样只要你点击popupwindow之外的界面就会执行onTouchEvent方法,从而这个界面就会关闭,功能实现了,这个功能可能网上还是有介绍的,我在这里又说了一边,可能不太详细新手看不太明白,不过你先把popupwindow弄懂了应该能看明白,这个功能一般网上介绍都是ucweb的那个设置界面,在屏幕最下方出现,可扩展性也很大,而且如果不设置android:background的话弹窗是透明的,界面全部自定义而且还可以完成点击关闭功能,如果你觉得够用可以到此为止了,可是我还没有写完,因为这个效果在我的需求中实现后真的非常难看,丑爆了。。。。。贴一张图 就是这样我勒个去,我是受不鸟了。。。。第一没有窗口的边框,alertdialog是google给带的,而且背景不蒙灰,效果超级差,而且我还得吧后面的界面里面的listview给屏蔽了,否则点击屏幕外则又打开另一个弹窗了,大家可以对比一下两个图,这是没有处理之前的,界面不好看好说大不了做张图当背景,但是蒙灰怎么办呢?经过研究终于发现了解决方案~~~那就是popupWindow = new PopupWindow(popupWindow_view, 300, 200, true);这个中的300和200改成 LayoutParams.FILL_PARENT,这样就是一个全屏的弹窗,然后将弹窗最外面的linaelayout A设置一个android:background="#b0000000"半透明背景,就可以获取到一个“弹窗外”(实际在弹窗里面,弹窗是全屏幕的,只不过用户看起来是中间是个弹窗,边上是蒙灰)的对象了,将最外面的linaelayout A实例化这样我们就可以监听他的点击事件了,这里跟大家解释一下当触发里面按钮的点击事件时候不会除外这个linaelayout A的点击事件,但是如果里面没有点击事件就会触发,也就是说现在如果点击上面的图标和名称因为他们没有响应事件,也会触发最外层linaelayout A的点击事件(而点击按钮则不会),所以我将标题位置的linaelayout B也加了一个空点击事件(就是图标和名称的位置),不做任何操作,就是为了抢外层linaelayout A的点击操作。然后再linaelayout A的点击监听里面加入 
if (popupWindow != null && popupWindow.isShowing()) {
   popupWindow.dismiss();
   }就可以了。
另外附上一个弹出窗口带边框的背景,我也是在网上找的,多学学shape绘图挺好的,我就打算深入研究一下,附图一张看效果  感觉好多了呵呵!~~~

这是带边框的背景
<shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
        <gradient android:startColor="#c3456789" android:endColor="#c0000000"
                android:angle="90" /><!--背景颜色渐变 -->
        <stroke android:dashWidth="1dp" android:dashGap="0dp"
                android:width="1dp" android:color="#A4A5A4"></stroke>
        <!--描边 -->
        <corners android:bottomRightRadius="5dp"
                android:bottomLeftRadius="5dp" android:topLeftRadius="5dp"
                android:topRightRadius="5dp" /><!--设置圆角-->
</shape>

这个带边框的背景贴到一个XML文件中,这里文件名为shape_circle_corner.xml ,
然后放到/res/drawable/shape_circle_corner.xml 目录下。效果不错


源码因为是一个打的项目,没法发上了,发上来你看着也乱,所以都是说的,写的有点乱,大家先看有不明白的可以再问我哈~~~~其实我就是提供个思路,思路有了就很好做了

 

http://www.eoeandroid.com/forum.php?mod=viewthread&tid=148247

 

 

<!--EndFragment-->

http://warnerhit.iteye.com/blog/1328994

android PopupWindow点击外部和返回键消失的解决方法 刚接手PopupWindow的时候,我们都可能觉得很简单,因为它确实很简单,不过运气不好的可能就会踩到一个坑: 点击PopupWindow最外层布局以及点击返回键PopupWindow不会消失 新手在遇到这个问题的时候可能会折腾半天,最后通过强大的网络找到一个解决方案,那就是跟PopupWindow设置一个背景 popupWindow.setBackgroundDrawable(drawable),这个drawable随便一个什么类型的都可以,只要不为空。  Demo地址:SmartPopupWindow_jb51.rar  下面从源码(我看的是android-22)上看看到底发生了什么事情 立即下载

相关推荐

js 点击页面其他地方关闭弹出层(示例代码)

代码如下:<html> <head> <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ /> <title>无标题文档</title> <style type=”text/css”> <!– *{font-size:12px;font-family:Verdana, Geneva, sans-serif;line-height:14px} a{color:#039} a:hover{color:#f60} .pop{position:absolute;left:40%;top:40%;width:300px;h

实现点击弹框外关闭弹框功能

点击弹框外关闭弹框 核心是监听全局点击事件,通过判断点击时的dom元素是否包含在弹框的dom中,即弹框dom.contains(event.target) <body> <div class="modal">Modal</div> <script> const model = document.querySelector('.modal'); function toggle(open) {

weixin_43294560的博客 6570

JS使用遮罩实现点击某区域以外时弹窗的弹出与关闭功能示例

主要介绍了JS使用遮罩实现点击某区域以外时弹窗的弹出与关闭功能,结合实例形式分析了javascript事件响应及页面元素属性动态操作弹出与关闭遮罩层相关实现技巧,需要的朋友可以参考下

点击页面弹窗外的任意位置,弹窗异常关闭的解决办法

在弹窗打开的位置添加close-on-click-modal,他的值设置成false,这样点击页面的其他位置弹窗就不会被关闭了。

m0_47561027的博客 1499

5款免费二进制编辑器横向评测:从HxD到ImHex谁更适合你?

本文对5款免费二进制编辑软件进行深度横向评测,包括HxD、wxHexEditor、010 Editor、ImHex和GNU Emacs,涵盖从轻量级到专业级的各种需求。评测基于文件处理能力、编辑功能、分析工具等核心维度,为开发者、逆向工程师和安全研究人员提供实用选择指南,帮助用户根据具体场景选择最适合的二进制编辑工具。

weixin_29278805的博客 371

MATLAB/Simulink实战:三电平逆变器SVPWM调制从入门到精通(附完整仿真模型)

本文提供了一份详尽的MATLAB/Simulink实战指南,手把手教你从零搭建三电平逆变器的SVPWM调制系统。文章深入剖析了27个空间矢量的分区与分解算法,并完整实现了包含中点电位平衡控制的Simulink仿真模型,旨在帮助电力电子与电机控制领域的学习者和工程师跨越从理论到实践的鸿沟。

sugar的博客 1213

vue3写一个点击弹框之外的区域关闭弹框

<p>如果要在 Vue 3 中实现点击弹框之外的区域关闭弹框的功能,可以这样做:</p> <ol> <li><p>在组件的模板中,包含一个用于显示弹框的元素,并且将该元素的 <code>ref</code> 属性设置为 <code>popup</code>。这样可以使用 <code&g...

weixin_42579969的博客 1845

人大金仓V8R3企业版License更新全攻略:从查看到重启一步到位

本文详细解析了人大金仓V8R3企业版License更新的完整运维流程,涵盖从诊断当前授权状态、获取与验证新文件、精准定位旧文件路径,到安全替换文件及服务重启验证的全过程。重点针对更新流程中常见的版本匹配、文件定位、权限与服务重启等关键环节提供了实战解决方案和避坑指南,帮助运维人员高效、平稳地完成授权续期。

redis7keeper的博客 900

点击PopupWindow之外的区域让其消失

copyPopupWindow.setFocusable(true);         copyPopupWindow.setOutsideTouchable(true);         copyPopupWindow.setBackgroundDrawable(new BitmapDrawable());

进行式 963

零基础手把手教你做FMEDA

本文通过分步骤手把手来教大家具体如何做FMEDA,希望对工作中要做FMEDA的童鞋有帮助。对于工作当中用不到FMEDA的童鞋,也可以作为科普知识,更好地了解一下FMEDA及硬件功能安全。

NewCarRen的博客 9932

手把手教你学Simulink——基于Simulink的多轮PMSM同步驱动交叉耦合控制

摘要:本文针对多轮PMSM同步驱动系统的负载不均、参数差异等问题,提出基于Simulink的交叉耦合控制解决方案。通过实时补偿轮间同步误差,实现同步误差<1%、转矩脉动<5%的性能提升。文章详细介绍了系统架构、核心算法(包括PMSM数学模型和偏差耦合控制算法)、Simulink建模步骤及参数设置,并通过仿真验证了稳态和动态性能。同时提供了工程调试建议和完整代码实现,为多轮驱动系统开发提供实用参考。该方案计算量小,可移植性强,适用于电动汽车、AGV等应用场景。

MHD0815的博客 140

popupWindow的弹出与关闭

这是popupWindow的几个显示方法: showAsDropDown(View anchor),相对某个控件的位置(正左下方),无偏移 showAsDropDown(View anchor, int xoff, int yoff):相对某个控件的位置,有偏移 showAtLocation(View parent, int gravity, int x, int y):相对于父控件的位置(

u012088724的专栏 4071

AutoSAR系列讲解(深入篇)14.7-Mcal Adc配置(上)

详细讲解了ADC的各个配置项的作用

雪云飞星的博客 1万+

popupwindow弹出窗关闭_Android Popupwindow弹出窗口的简单使用方法

本文实例为大家分享了Android Popupwindow弹出窗口的具体代码,供大家参考,具体内容如下代码很简单,没有和别的控件连用。布局自己随意定义,我的这个是最基础的,就直接上代码啦!在MainActivity里import android.content.Context;import android.os.Bundle;import android.support.v7.app.AppCom...

weixin_33091939的博客 749

GStreamer —— 2.1、Windows搭建GStreamer环境,Qt加载GStreamer库后运行 - “教程1:Hello world!“(附:完整源码)

GStreamer —— 2、Windows搭建GStreamer环境,Qt加载GStreamer库后运行"教程1:Hello world!"

797

【智能座舱】- 智能座舱研究报告合集

智能座舱研究报告合集

零点壹客的博客 1305

popupwindow弹出窗关闭_PopupWindow点击灰色背景关闭窗口的问题

PopupWindow可以通过WindowManager.LayoutParams来设置窗口背景的不透明度private void changeBackground(Float alpha){WindowManager.LayoutParams lp = getWindow().getAttributes();lp.alpha = alpha;getWindow().setAttributes(l...

weixin_30086041的博客 536

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

android popupwindow外部可点击,PopupWindow 点击外部区域无法关闭的问题

[TOC]在android4.0/5.0系统上,使用popupWindow时,点击内容外部区域无法关闭,但是在6.0机子上又是正常的,而我在代码中明明已经进行了如下设置:mPopupWindow = new PopupWindow(popView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, t...

weixin_31253409的博客 1355

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Android中PopupWindow点击窗口之外和返回键消失,界面锁定的实现

这几天做谷居网的android应用到混天暗地的程度了。。 做一个加入灵感集的操作,需要用户注册,弹出这么一个PopupWindow的提示框。 要实现的功能很简单,点击稍后提醒以及键盘的返回键要能退出PopupWindow,为了达到鼓励用户注册的目的,点击其他部分窗口不会消失,毕竟咱的目的是更多的用户注册不是,点击返回键还能使其消失,毕竟返回键离手指头更近。 当然,我会告诉你点击其

misly_vinky的专栏 3万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

[Android]PopupWindow 点击外部区域无法关闭的问题

[TOC] 在android4.0/5.0系统上,使用popupWindow时,点击内容外部区域无法关闭,但是在6.0机子上又是正常的,而我在代码中明明已经进行了如下设置:mPopupWindow = new PopupWindow(popView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT,

冰川孤辰的专栏 8720

PopupWindow点击外部区域消失

PopupWindow点击外部区域消失一般有两种方法,一种是Android api里面提供的方法,另一种是通过事件分发处理。第一种方法是在定义好popwindow后,在ShowAtLocation方法调用之前加上popupWindow.setBackgroundDrawable(new BitmapDrawable()); popupWindow.setFocusable(true)

qq_31455451的博客 5755

转:点击弹出窗口之外的区域关闭该窗口的方法

之前做了一个弹出窗口使用alertdialog来实现的,效果很不错google都给加了特效,如窗口的边框,窗口的标题以及后面activity的蒙灰,然后用返回键关闭,原本都做好了可是需求忽然变了,想要加一个关闭按钮,可是alertdialog的title位置挡着,没办法在右上角加一个title,如图 ,所以想了一个新的交互方式,点击窗口之外来关闭窗口,可是查了好久发现google根...

u011207577的专栏 841

点击popupwindow窗口之外的区域popupwindow消失

怎么使点击一个popupwindow窗口之外的区域popupwindow消失呢? 这个功能应该是不难的,查了下文档,没发现明显的方法可以调用。 开始以为popupWindow.setOutsideTouchable(true);这个方法可以呢,试了试,不行,其实这个方法时设置popupWindow以外的区域可以相应触摸事件,比如我们重写了触摸事件去做一些别的操作。

wy978651775的专栏 869

点击一个popupwindow窗口之外的区域popupwindow消失,带来的问题!!

popupwindow窗口之外的区域popupwindow消失 , 以前说过需要设置: mPopupWindow.setFocusable(true); // 设置PopupWindow可获得焦点 mPopupWindow.setTouchable(true); // 设置PopupWindow可触摸 mPopupWindow.setOutsideTouchable(true

独领fengsao的猫 1566

怎么使点击一个popupwindow窗口之外的区域popupwindow消失呢?

这个功能应该是不难的,查了下文档,没发现明显的方法可以调用。 开始以为popupWindow.setOutsideTouchable(true);这个方法可以呢,试了试,不行,其实这个方法时设置popupWindow以外的区域可以相应触摸事件,比如我们重写了触摸事件去做一些别的操作。 对了,还有,设置popupWindow.setFocusable(true);

tianxiangshan的专栏 7448

Android PopupWindow点击区域外使对话框消失

作为android开发者,很可能在使用PopupWindow时出现各种各样的问题 比如调用setOutsideTouchable方法没有效果的情况 以下说几点: 如果要使用点击区域外使对话框消失,必须调用以下方法: popupWindow.setFocusable(true);//这里必须设置为true才能点击区域外或者消失 popupWindow.setTouc

qq_32546981的博客 2253
上一篇: Android事件传递机制【Touch事件】
下一篇: android中关于百度地图的使用
canvas18
博客等级 码龄15年 8粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值