`
warnerhit
  • 浏览: 122797 次
  • 性别: 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-->
分享到:
评论

相关推荐

    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...

    网际畅游 MyIE 3.0 源代码

    每个窗口也可分别设置是否使用自动过滤弹出窗口功能而不影响其他窗口。 过滤重复窗口:在编辑窗口过滤器中选择过滤重复窗口,MyIE会自动重用已打开的相同URL的窗口,避免资源浪费。 下载控制:你可以为每个...

    PT80-NEAT开发指南v1.1

    应用程序的关闭 .................................................................................................................................... 19 框架窗口 ...........................................

    数据结构算法演示系统

    运行测试程序 单击窗口上部的“运行”按钮,将弹出运行窗口,运行所选算法的测试程序。若运行按钮为灰色,表示该算法无单独测试程序。 例如,算法6.5的测试运行窗口如图3所示: &lt;br&gt; &lt;br&gt; &lt;br&gt; ...

    数据结构中C 语言源码及算法演示系统

    运行测试程序 单击窗口上部的“运行”按钮,将弹出运行窗口,运行所选算法的测试程序。若运行按钮为灰色,表示该算法无单独测试程序。 例如,算法6.5的测试运行窗口如图3所示: &lt;br&gt; &lt;br&gt; &lt;br&gt; ...

    电脑高手必备 Windows系统35招实用技巧

    击“开始→控制面板→管理工具→服务”,弹出服务列表窗口,有些服务已 经启动,有些则没有。我们可查看相应的服务项目描述,对不需要的服务予 以关闭。如“Alerter”,如果你未连上局域网且不需要管理警报,则可...

    易语言程序免安装版下载

    修改扩展界面支持库三,解决单击卷帘菜单后导致日期框不能弹出下拉窗口的BUG。 4. 修改XP风格支持库,解决GDI资源泄露,以及在使用通用组件库六时组合框标题出现重影的BUG。 5. 修改扩展界面支持库一,解决树形框...

    flash shiti

    45.新增图层的方法有: A. 选择Insert菜单下的Layer命令 B. 按下图层编辑区左下方的钮 C. 按下图层编辑区左下方的钮 D. 选择File菜单下的Layer命令 FLASH 样题参考答案 1.D 2.D 3.C 4.B 5.B 6.A 7.D 8.B 9.D ...

    (严版C语言版)数据结构源码.rar

    单击窗口上部的“运行”按钮,将弹出运行窗口,运行所选算法的测试程序。若运行按钮为灰色,表示该算法无单独测试程序。 例如,算法6.5的测试运行窗口如图3所示: 图3 测试运行窗口 测试运行说明: ...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    (1)针对多窗口类浏览器模式问题,指出并分析了该问题存在的原因,利用Activity的运行机制,通过Fragment栈对主要模块的Webview进行管理,实现对不同模块之间切换的控制。 (2)针对跨域数据交互问题,指出并分析了...

    网管教程 从入门到精通软件篇.txt

    不扫描驱动器看是否有坏区域,因此只应对以前格式化过的驱动器使用该参数。  /fs:file-system  指定要使用的文件系统:FAT、FAT32 或 NTFS 。如果未指定文件系统,将使用现有的文件系统格式。  Map  显示...

    Photoshop基础培训教程模拟测试题.doc

    除了使用 按钮进行软件的退出之外,还有其他3种方法同样可以将软件关闭,分别是( )、( )、( )。 2.新建文件的方法有3种,分别是( )、( )、( )。 3.打开文件的方法有3种,分别是( )、( )、( )。 4.将鼠标光标放置在( ...

    Flash伴侣

    Flash Fere 还允许你弹出标准的打开媒体文件和Flash文件的对话框,使用Flash Fere,你完全可以做出一个Flash版的媒体播放器。此外,你还可以动态控制播放窗口的位置、大小和形状,动态指定背景是否全屏(就像...

    D&D工具箱「D&D Toolbox」-crx插件

    此功能会在页面上扫描任何看起来像骰子掷骰的内容,并使其成为可单击的链接,一旦单击链接,您将弹出一个弹出窗口,该弹出窗口将向您显示该掷骰以及每个掷骰和所有掷骰的总值。弹出窗口甚至包括重新掷骰子的选项,...

    asp.net知识库

    用于弹出ModalDialog进行数据选择的控件 使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法 制作一个简单的多页Tab功能 一完美的关于请求的目录不存在而需要url重写的解决方案! 在C#中实现MSN消息框的...

    javaSE代码实例

    11.3.4 方法重写对抛出异常声明的约束 210 11.4 定义自己的异常 212 11.4.1 创建自己的异常类 212 11.4.2 使用自定义的异常类 213 11.4.3 显性再抛出作用的体现 215 11.5 异常的匹配 217 11.5.1 同时...

Global site tag (gtag.js) - Google Analytics