点击外面时如何关闭弹出窗口?

时间:2014-03-13 10:43:00

标签: android popup popupwindow

我想知道一旦用户点击它后如何关闭弹出窗口,我看了PopupWindow - Dismiss when clicked outside但没有任何运气,我尝试了代码:

pw.setBackgroundDrawable(null);
pw.setOutsideTouchable(true);
pw.setTouchInterceptor(new OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event)
          {
           if(event.getAction() == MotionEvent.ACTION_OUTSIDE)
                {
                    pw.dismiss();
                    return true;
                 }
            return false;
         }
     });

4 个答案:

答案 0 :(得分:1)

试试这个。希望它有效:)

解决方案1:

popupWindow.setFocusable(true);
popupWindow.update();

如果这不起作用。那么你可以尝试一下。

解决方案2:

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

类似的东西,

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

或者如果您的对话在非模型中,那么,

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

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

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

3 - 覆盖对话框的onTouchEvent()并检查操作类型。如果动作类型是' MotionEvent.ACTION_OUTSIDE'表示用户在对话区域外进行交互。因此,在这种情况下,您可以减少对话框或决定要执行的操作。 view plainprint?

public boolean onTouchEvent(MotionEvent event)  
{  

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

答案 1 :(得分:1)

好的,最后修好了。

首先制作弹出窗口位于相对布局上的主要布局。然后在顶部放置一个全屏空白布局,使其变得不可见且透明。

然后显示弹出窗口显示时,使用setVisibility(View.VISIBLE);设置全屏面板,并隐藏弹出窗口隐藏setVisibility(View.GONE);

还需要从布局的触摸侦听器返回true(要停止传递回主布局的触摸事件):

blocker.setOnTouchListener(new OnTouchListener() { 
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});

并在弹出窗口中输入属性:

setTouchable(true);
setOutsideTouchable(false);

干杯

答案 2 :(得分:0)

你应该将BackgroundDrawable设置为null,因为这会杀死OnTouchListener; 您应该pw.setBackgroundDrawable(null);替换pw.setBackgroundDrawable(new BitmapDrawable())

答案 3 :(得分:0)

最好使用对话框Fragment。它是为弹出功能而制作的,默认情况下在对话框Fragment外面按下或使用硬后退按钮时关闭。