首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在对话框外单击以关闭对话框?

如何在对话框外单击以关闭对话框?
EN

Stack Overflow用户
提问于 2011-12-05 18:42:09
回答 12查看 165.2K关注 0票数 169

我已经为我的应用程序实现了一个自定义对话框。我想实现的是,当用户在对话框之外单击时,对话框将被关闭。我必须为此做些什么?

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2011-12-05 18:47:02

您可以使用dialog.setCanceledOnTouchOutside(true);,如果您在对话框外部进行触摸,它将关闭对话框。

像这样,

代码语言:javascript
复制
  Dialog dialog = new Dialog(context)
  dialog.setCanceledOnTouchOutside(true);

或者如果你的对话框是非模型的,

1-为对话框的窗口属性设置标志-FLAG_NOT_TOUCH_MODAL

代码语言:javascript
复制
Window window = this.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);

2-将另一个标志添加到窗口属性,,FLAG_WATCH_OUTSIDE_TOUCH -此标志用于对话框在其可见区域之外接收触摸事件。

3-覆盖对话框的onTouchEvent()并检查操作类型。如果操作类型为'MotionEvent.ACTION_OUTSIDE‘,则表示用户在对话框区域之外进行交互。因此,在这种情况下,您可以忽略对话框或决定要执行的操作。查看普通打印?

代码语言:javascript
复制
public boolean onTouchEvent(MotionEvent event)  
{  

       if(event.getAction() == MotionEvent.ACTION_OUTSIDE){  
        System.out.println("TOuch outside the dialog ******************** ");  
               this.dismiss();  
       }  
       return false;  
}  

有关更多信息,请查看How to dismiss a custom dialog based on touch points?How to dismiss your non-modal dialog, when touched outside dialog region

票数 376
EN

Stack Overflow用户

发布于 2013-06-18 19:19:22

只需使用

代码语言:javascript
复制
dialog.setCanceledOnTouchOutside(true);
票数 21
EN

Stack Overflow用户

发布于 2012-03-31 06:08:10

您可以使用此onTouchEvent实现。它阻止底层活动对触摸事件作出反应(如前面提到的howettl)。

代码语言:javascript
复制
@Override
public boolean onTouchEvent ( MotionEvent event ) {
  // I only care if the event is an UP action
  if ( event.getAction () == MotionEvent.ACTION_UP ) {
    // create a rect for storing the window rect
    Rect r = new Rect ( 0, 0, 0, 0 );
    // retrieve the windows rect
    this.getWindow ().getDecorView ().getHitRect ( r );
    // check if the event position is inside the window rect
    boolean intersects = r.contains ( (int) event.getX (), (int) event.getY () );
    // if the event is not inside then we can close the activity
    if ( !intersects ) {
      // close the activity
      this.finish ();
      // notify that we consumed this event
      return true;
    }
  }
  // let the system handle the event
  return super.onTouchEvent ( event );
}

来源:http://blog.twimager.com/2010/08/closing-activity-by-touching-outside.html

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8384067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档