Skip to content Skip to sidebar Skip to footer

Android Dialog Set Cancel On Touch Out Side

I have this custom dialog inside an Activty which is inside ActivityGroup. I want the dialog to dismiss when clicked outside, and tried everything i found online to make it work..

Solution 1:

Ok so after lots of thinking i found out the most simple solution:

The Problem:

From some reason - although the theme I've used is a dialog and not a full screen display - the getWindow().getDecorView() returns a View which covers the whole screen.

The Answer :

in my XML file I gave the root element an id and I've changed the function above as follow:

private View rootView;

public BaseDialog(Context context, int theme) {
    super(context, theme);  
    //I don't think the next 2 lines are really important - but I've added them for safety  
    setCancelable(true); 
    setCanceledOnTouchOutside(true);    
}

public void setRootView(int resourceId)
{
    this.rootView = findViewById(resourceId);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    Rect rect = new Rect();
    rootView.getHitRect(rect);
    if (!rect.contains((int)event.getX(), (int)event.getY()))
    {
        this.dismiss();
        return true;
    }
    return false;       
}       

Hope it will help someone... :)


Post a Comment for "Android Dialog Set Cancel On Touch Out Side"