How to dismiss the dialog with click on outside of the dialog? How to dismiss the dialog with click on outside of the dialog? android android

How to dismiss the dialog with click on outside of the dialog?


You can use dialog.setCanceledOnTouchOutside(true); which will close the dialog if you touch outside of the dialog.

Something like,

  Dialog dialog = new Dialog(context)  dialog.setCanceledOnTouchOutside(true);

Or if your Dialog in non-model then,

1 - Set the flag-FLAG_NOT_TOUCH_MODAL for your dialog's window attribute

Window window = this.getWindow();window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);

2 - Add another flag to windows properties,, FLAG_WATCH_OUTSIDE_TOUCH - this one is for dialog to receive touch event outside its visible region.

3 - Override onTouchEvent() of dialog and check for action type. if the action type is'MotionEvent.ACTION_OUTSIDE' means, user is interacting outside the dialog region. So in this case, you can dimiss your dialog or decide what you wanted to perform.view plainprint?

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

For more info look at How to dismiss a custom dialog based on touch points? andHow to dismiss your non-modal dialog, when touched outside dialog region


You can use this implementation of onTouchEvent. It prevent from reacting underneath activity to the touch event (as mentioned howettl).

@Overridepublic 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 );}

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