Open a PopupWindow and let the outsides still touchable

Marcos Vasconcelos picture Marcos Vasconcelos · Sep 1, 2011 · Viewed 10.5k times · Source

How to open a PopupWindow on Android and let all the others components touchable without dismiss the PopupWindow?

This is how it's created:

public class DynamicPopup {
    private final PopupWindow window;
    private final RectF rect;
    private final View parent;
    private final RichPageView view;

    public DynamicPopup(Context context, RichPage page, RectF rectF, View parent) {
        this.parent = parent;
        rect = rectF;

        window = new PopupWindow(context);

        window.setBackgroundDrawable(new BitmapDrawable());
        window.setWidth((int) rect.width());
        window.setHeight((int) rect.height());
        window.setTouchable(true);
        window.setFocusable(true);
        window.setOutsideTouchable(true);

        view = new RichPageView(context, page, false);
        window.setContentView(view);

        view.setOnCloseListener(new Listener(){
            @Override
            public void onAction() {
                window.dismiss();
            }
        });


    }

    public void show() {
        window.showAtLocation(parent, Gravity.NO_GRAVITY, (int) rect.left, (int) rect.top);
    }
}

Answer

Jay Parker picture Jay Parker · Jun 18, 2012

just like the ernazm say

As per javadocs

Controls whether the pop-up will be informed of touch events outside of its window. This only makes sense for pop-ups that are touchable but not focusable

and it's work on

window.setTouchable(true);
window.setFocusable(false);
window.setOutsideTouchable(false);

When window touchalbe is true, focusable is false, setOutsideTouchable() is work, if setOutsideTouchable(true), touch outside of popupwindow will dismiss, otherwise the outside of popupwindows still can be touchable without dismiss.