触摸外面时关闭弹出窗口

时间:2014-02-08 06:11:09

标签: android popupwindow

我想在外面触摸时忽略PopupWindow,我从这个问题得到答案。

here is that Link

他们要求在这两行代码中加入。

myPopupWindow.setBackgroundDrawable(new BitmapDrawable());
myPopupWindow.setOutsideTouchable(true);

现在,当我在PopupWindow之外触摸时,Popup会消失。

仅{p> setOutsideTouchable(true);无效。当我设置背景Drawable时,它正在工作。 这种魔法怎么会发生?任何人都可以解释一下吗?

也弃用new BitmapDrawable()。这有什么替代方案吗?

3 个答案:

答案 0 :(得分:0)

尝试以下代码:

myPopupWindow.setCanceledOnTouchOutside(true);
myPopupWindow.setCancelable(true);

答案 1 :(得分:0)

使用TouchInterceptor关闭弹出窗口: -

private LayoutInflater inflater;
private PopupWindow pw;
private View popupView;

inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
popupView = inflater.inflate(R.layout.popup_layout, null, true);
pw = new PopupWindow(popupView,750,500,true);
pw.setBackgroundDrawable(new BitmapDrawable());

pw.setTouchInterceptor(new OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {

                    pw.dismiss();

                    return true;
                }
        return false;
    }
});

pw.showAtLocation(findViewById(R.id.main_layout),Gravity.BOTTOM, 3, 35);

答案 2 :(得分:0)

使用全屏透明的“root”可点击布局弹出您的弹出窗口,然后在弹出窗口中添加尺寸(popup.setWidth(850); popup.setHeight(550))。还可以使root透明布局可点击,这样您就会知道用户触摸“外部”cuz以便用户可以看到唯一的弹出窗口。这是根布局:

final LinearLayout contentLayout = new LinearLayout(activity);
contentLayout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
contentLayout.setOrientation(LinearLayout.VERTICAL);
contentLayout.setClickable(true);
contentLayout.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        dismissPopup();
    }
});

现在您只需要将弹出窗口添加到该布局中。为什么这种方式更好?因为你可以设置contentLayout背景颜色来实现使整个屏幕被弹出窗口遮蔽的效果,这样用户就可以看到只有弹出窗口现在是模态和活动的。