[英]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.