`
warnerhit
  • 浏览: 123650 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多

之前做了一个弹出窗口使用alertdialog来实现的,效果很不错google都给加了特效,如窗口的边框,窗口的标题以及后面activity的蒙灰,然后用返回键关闭,原本都做好了可是需求忽然变了,想要加一个关闭按钮,可是alertdialog的title位置挡着,没办法在右上角加一个title,如图未命名.jpg ,所以想了一个新的交互方式,点击窗口之外来关闭窗口,可是查了好久发现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的话弹窗是透明的,界面全部自定义而且还可以完成点击关闭功能,如果你觉得够用可以到此为止了,可是我还没有写完,因为这个效果在我的需求中实现后真的非常难看,丑爆了。。。。。贴一张图未命名1.jpg 就是这样我勒个去,我是受不鸟了。。。。第一没有窗口的边框,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绘图挺好的,我就打算深入研究一下,附图一张看效果 未命名2.jpg 感觉好多了呵呵!~~~

这是带边框的背景
<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>


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

 

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

 

 

<!--EndFragment-->
分享到:
评论

相关推荐

    delphi实现QQ弹出窗口

    - 弹出窗口通常是非模态的,用户可以通过点击窗口之外的区域或按Esc键关闭。 6. **代码组织** - 将上述功能封装到一个自定义的组件或类中,以便在其他项目中重用。例如,创建一个TPopUpWindow类,继承自TForm,并...

    LHGDialog V3.5.2 正式版 lhgDialog弹出窗口组件 lhgdialog V3.5.2

    lhgdialog是一功能强大的简单迷你并且高效的弹出窗口组件,基于网络访问并且兼容IE 6.0+,Firefox 3.0+,Opera 9.6+,Chrome 1.0+,Safari 3.22+。 版本(2011-07-04 发布): V3.5.2 窗口lhgdialog.min.js文件的url...

    js弹出层暂停实现模式窗口效果(修改后的)

    4. **事件阻止**:为了暂停其他页面交互,可以使用JavaScript的`event.stopPropagation()`和`event.preventDefault()`方法阻止事件冒泡和默认行为,确保用户点击弹出层之外的区域不会触发任何其他操作。 5. **动画...

    New-Pop-Up:用弹簧靴重建弹出窗口

    在JavaScript中,我们可以添加一个关闭按钮的点击事件,或者监听`mousedown`事件,如果点击发生在弹出窗口之外,则关闭弹出窗口。 对于更复杂的功能,比如弹出窗口的动画效果,我们可以利用JavaScript的`setTimeout...

    android实现百度地图自定义弹出窗口功能

    在这个方法中,我们需要检查用户是否点击了Marker之外的区域,如果是,就隐藏当前的弹出窗口。然后,根据用户点击的位置,计算对应的屏幕坐标,并将`popupView`定位到相应位置。这里可以利用`projection....

    Jquery实现iframe弹出层,简单实用

    通过这个教程,您将了解到如何创建一个能够加载外部网页或内容到弹出窗口中的功能。 首先,确保在您的项目中引入了jQuery库。您可以从jQuery官方网站下载,或者通过CDN(内容分发网络)链接直接引入,如: ```html ...

    MFC下弹出设置窗口demo

    "MFC下弹出设置窗口demo"的标题暗示了我们要探讨的是如何在MFC应用程序中实现一个模态对话框(modal dialog box),它通常用作设置或配置界面。模态对话框是一种阻塞用户界面,直到用户与其交互并关闭它为止的窗口。...

    让js弹出窗口居前显示的实现方法

    这种方法适用于普通的弹出窗口,它会在用户点击窗口之外的区域时自动将焦点返回到窗口本身。 2. **使用`showModalDialog`函数**: `showModalDialog`是JavaScript的一个内置函数,它能创建一个模式对话框。这种...

    jQuery点击弹出登录框代码.zip

    4. **关闭功能**:登录框上通常会有一个关闭按钮或者点击外部区域关闭的设置。这可以通过监听关闭按钮的点击事件,或者监听窗口的点击事件并检查是否点击在登录框之外来实现。 5. **表单验证**:为了确保用户输入...

    js弹出层示例代码

    在这个特定的案例中,"js弹出层示例代码"是指利用JavaScript实现的网页弹出窗口功能,通常这种弹出层用于显示通知、对话框或者进行用户交互。这种技术在网页设计和用户体验优化上具有重要意义。 首先,我们来看看...

    PopupWindow的使用,按钮下弹出菜单

    最后,当用户选择了一个菜单项或点击了`PopupWindow`之外的区域,我们需要关闭`PopupWindow`,这可以通过调用 `dismiss()` 方法实现。 通过以上步骤,我们就成功地实现了点击按钮后下弹出菜单的功能。在实际应用中...

    一个基于jquery的弹出层

    5. **关闭弹出层**:同样,我们也需要提供一个关闭弹出层的机制,这通常是一个“关闭”按钮或者点击弹出层之外的区域。使用`.hide()`或相应的动画方法可以实现。例如,`$("#closeButton").click(function() { $("#...

    Jquery 弹出图件

    4. **关闭机制**:为了提供关闭选项,可以添加一个关闭按钮或者通过点击对话框之外的区域来关闭。这可以通过`.dialog('close')`实现。 以下是一个简单的示例代码片段,展示了如何使用jQuery UI创建一个弹出图件: ...

    安卓Android源码——用PopupWindow实现弹出菜单.zip

    - 设置是否允许触摸外部区域关闭`popupWindow.setOutsideTouchable(true);` - 设置背景透明度`popupWindow.setBackgroundDrawable(new ColorDrawable(0x00000000));` - 设置动画效果`popupWindow....

    jQuery插件集之(弹出div3)+Demo

    这个插件提供了一种替代传统模态窗口的方法,允许我们通过弹出div来显示信息或进行交互。下面将详细介绍jQuery、插件的概念,以及如何利用这个插件实现div弹出功能。 首先,jQuery是一个广泛使用的JavaScript库,它...

    模拟MSN弹出式对话框示例

    3. **事件处理**:为了实现与用户交互,需要为对话框添加事件监听器,例如点击关闭按钮时关闭对话框,或者当用户点击对话框之外的区域时,对话框能够消失。 4. **多线程**:为了不影响主程序的正常运行,弹出对话框...

    积累大VC 框架窗口编程小技巧

    这种功能常见于弹出式窗口或工具提示。通过监听鼠标事件,当鼠标点击在对话框之外的区域时,关闭对话框。这可以通过在对话框类中添加一个自定义消息处理来实现,比如在鼠标按下事件中检查点击位置是否在对话框范围...

    基于jQuery的弹出层放大插件

    6. **关闭按钮**:为了方便用户随时退出弹出层,插件提供了一个明显的关闭按钮,点击后可以快速返回原来的页面。 7. **自适应布局**:此插件具备自适应布局功能,可以根据浏览器窗口大小或设备屏幕尺寸自动调整图片...

    jQuery制作弹出框效果.rar

    弹出框通常是指在网页主内容之外独立显示的一段信息区域,它可以是警告、对话框、模态窗口或信息提示。在jQuery中,我们可以利用DOM操作和CSS控制来实现这种效果。 要创建一个基本的弹出框,我们需要以下步骤: 1....

    wps---作为独立窗口显示.docx

    如果你想要将已经打开的文档窗口变为独立显示,可以右键点击任务栏上WPS的图标,在弹出的快捷菜单中选择“将窗口分离”。这会把当前文档从主窗口中分离出来,成为一个单独的窗口。 此外,你还可以通过窗口的“并排...

Global site tag (gtag.js) - Google Analytics