繁体   English   中英

如何在外部点击时关闭pop_up窗口?

[英]How to dismiss a pop_up window when clicking outside?

我想知道一旦用户点击它外面如何关闭pop_up窗口,我看看PopupWindow - 在外面点击时解散但没有任何运气,我尝试了代码:

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

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

解决方案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',则表示用户正在对话区域外进行交互。 因此,在这种情况下,您可以减少对话框或决定要执行的操作。 查看plainprint?

public boolean onTouchEvent(MotionEvent event)  
{  

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

好的,最后修好了。

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

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

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

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

并为弹出窗口提供属性:

setTouchable(true);
setOutsideTouchable(false);

干杯

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM