我想在外面触摸时忽略PopupWindow
,我从这个问题得到答案。
他们要求在这两行代码中加入。
myPopupWindow.setBackgroundDrawable(new BitmapDrawable());
myPopupWindow.setOutsideTouchable(true);
现在,当我在PopupWindow
之外触摸时,Popup会消失。
setOutsideTouchable(true);
无效。当我设置背景Drawable时,它正在工作。
这种魔法怎么会发生?任何人都可以解释一下吗?
也弃用new BitmapDrawable()
。这有什么替代方案吗?
答案 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背景颜色来实现使整个屏幕被弹出窗口遮蔽的效果,这样用户就可以看到只有弹出窗口现在是模态和活动的。