我想知道一旦用户点击它后如何关闭弹出窗口,我看了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;
}
});
答案 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外面按下或使用硬后退按钮时关闭。