我有一个弹出式菜单实现,它显示在点击一个按钮。这是我的onclick方法。
public void showOverflow(View view) {
boolean click = true;
Button action = (Button) findViewById(R.id.btbAction);
LayoutInflater inflater = (LayoutInflater) main.this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View popupView = inflater.inflate(R.layout.overflow_layout, null);
final PopupWindow pw = new PopupWindow(popupView,
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
pw.setOutsideTouchable(true);
if (click) {
pw.showAsDropDown(action, 0, 0);
click = false;
} else {
pw.dismiss();
click = true;
}
}单击该按钮时,将显示弹出窗口。现在,问题是当我在弹出窗口之外触摸时,窗口不会被关闭。我尝试将此属性设置为弹出窗口
pw.setOutsideTouchable(true);事情保持不变。请帮我解决这个问题
发布于 2012-05-14 13:11:41
您应该将true:pw.setOutsideTouchable(false);更改为setOutsideTouchable调用的参数
控制是否向弹出窗口通知其窗口外的触摸事件。这只对可触摸但不可聚焦的弹出窗口有意义,这意味着窗口外部的触摸将传递到后面的窗口。默认值为false。
如果弹出窗口正在显示,则调用此方法将仅在下次显示弹出窗口时生效,或者通过手动调用update()方法之一来生效。
参数:touchable 如果弹出窗口应该接收外部触摸事件,则为true,否则为false
另一方面,click局部变量应该做什么?它被设置为true,因此无论何时调用showOverflow方法,它都将强制pw弹出,并且在稍后无缘无故地将其设置为false,因为它的生命周期在您离开该方法时结束。
您的代码应该如下所示:
private LayoutInflater inflater;
private Button action;
private PopupWindow pw;
private View popupView;
/*
* (non-Javadoc)
* @see android.app.Activity#onCreate(android.os.Bundle)
*/
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
popupView = inflater.inflate(R.layout.overflow_layout, null, false);
action = (Button) findViewById(R.id.action);
action.setOnClickListener(this);
}
public void showOverflow()
{
pw = new PopupWindow(getApplicationContext());
pw.setWidth(WindowManager.LayoutParams.WRAP_CONTENT);
pw.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
pw.setOutsideTouchable(true);
pw.setContentView(popupView);
pw.showAsDropDown(action, 0, 0);
}如果您在Activity类中,则应该使用getApplicationContext()。否则,您应该将Context作为参数获取。
发布于 2015-03-13 10:51:19
将pw.setOutsideTouchable(true);更改为pw.setOutsideTouchable(false);
发布于 2021-09-02 14:43:22
我知道这是一个老生常谈的问题,但这是我为解决它所做的。
问题是:
每次调用showOverFlow()时都会创建一个新的
实例,这就是为什么在关闭弹出窗口后会显示另一个弹出窗口的原因
你要做的是在OnCreate中初始化弹出视图
然后在showOverFlow()方法中调用popupwindow.showAsDropDown(view)
最后,您可以检查它是否显示以下代码
将此代码放入您的onclick按钮中
if(popupwindow.isShowing()){
popup.dismiss() }
else{
ShowOverflow()}https://stackoverflow.com/questions/10577596
复制相似问题