首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >问题解除弹出窗口

问题解除弹出窗口
EN

Stack Overflow用户
提问于 2012-05-14 12:44:15
回答 3查看 9.5K关注 0票数 5

我有一个弹出式菜单实现,它显示在点击一个按钮。这是我的onclick方法。

代码语言:javascript
复制
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;
    }
}

单击该按钮时,将显示弹出窗口。现在,问题是当我在弹出窗口之外触摸时,窗口不会被关闭。我尝试将此属性设置为弹出窗口

代码语言:javascript
复制
pw.setOutsideTouchable(true);

事情保持不变。请帮我解决这个问题

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-14 13:11:41

您应该将truepw.setOutsideTouchable(false);更改为setOutsideTouchable调用的参数

控制是否向弹出窗口通知其窗口外的触摸事件。这只对可触摸但不可聚焦的弹出窗口有意义,这意味着窗口外部的触摸将传递到后面的窗口。默认值为false

如果弹出窗口正在显示,则调用此方法将仅在下次显示弹出窗口时生效,或者通过手动调用update()方法之一来生效。

参数:touchable 如果弹出窗口应该接收外部触摸事件,则为true,否则为false

另一方面,click局部变量应该做什么?它被设置为true,因此无论何时调用showOverflow方法,它都将强制pw弹出,并且在稍后无缘无故地将其设置为false,因为它的生命周期在您离开该方法时结束。

您的代码应该如下所示:

代码语言:javascript
复制
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作为参数获取。

票数 5
EN

Stack Overflow用户

发布于 2015-03-13 10:51:19

pw.setOutsideTouchable(true);更改为pw.setOutsideTouchable(false);

票数 0
EN

Stack Overflow用户

发布于 2021-09-02 14:43:22

我知道这是一个老生常谈的问题,但这是我为解决它所做的。

问题是:

每次调用showOverFlow()时都会创建一个新的

实例,这就是为什么在关闭弹出窗口后会显示另一个弹出窗口的原因

你要做的是在OnCreate中初始化弹出视图

然后在showOverFlow()方法中调用popupwindow.showAsDropDown(view)

最后,您可以检查它是否显示以下代码

将此代码放入您的onclick按钮中

代码语言:javascript
复制
  if(popupwindow.isShowing()){
  popup.dismiss() }
  else{
  ShowOverflow()}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10577596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档