【问题标题】:click outside of popup to dismiss it [duplicate]在弹出窗口之外单击以将其关闭[重复]
【发布时间】:2012-09-15 07:29:28
【问题描述】:

可能重复:
How to dismiss the dialog with click on outside of the dialog?

如何在弹出窗口外部单击以将其关闭?

这是我的代码:

cell.setOnClickListener(new OnClickListener(){

    /*This code is in a separate class so I needed to use ctx as context 
    *and the string "layout_inflater" because it was not recognizing 
    *LAYOUT_INFLATER_SERVICE*/

    @Override
    public void onClick(View arg0) {LayoutInflater layoutInflater  = 
    (LayoutInflater)ctx.getSystemService("layout_inflater");  
    View popupView = layoutInflater.inflate(R.layout.popup_window, null); 
    final PopupWindow popupWindow = new PopupWindow(popupView, 
          LayoutParams.WRAP_CONTENT,  LayoutParams.WRAP_CONTENT);
    popupWindow.showAtLocation(newParentLayout, Gravity.CENTER, 0, 0); 
    }

我也尝试添加所有这些但没有结果。

 popupWindow.setTouchable(true);
 popupWindow.setFocusable(true);
 popupWindow.setOutsideTouchable(true);
 Drawable bg = ctx.getResources().getDrawable(R.drawable.popup_bg);
 popupWindow.setBackgroundDrawable(bg);

我没有想法。有什么帮助吗?

编辑添加:主布局是 ViewPager/PagerAdapter,如果这会影响什么?

【问题讨论】:

  • @Eng.Fouad 解决方案是用于对话框,这是用于弹出窗口。

标签: android


【解决方案1】:

请连同背景一起设置setOutsideTouchable(true)。这对我来说很好。我知道将背景可绘制对象设置为 null 会杀死 OnTouchListener。

【讨论】:

  • @Marcin_S 你能提供 setbackgrounddrawable 的代码吗?因为我已经在上面做了,但它没有用。在我看来,其他 stackoverflow 答案中提供的解决方案使用了已弃用的 setBackgroundDrawable,我宁愿学习正确的方法
  • @Marcin_S 发现我的错误,在设置外部可触摸之前有 showAtLocation。这是正确的答案。谢谢!
  • 不客气。我很高兴它对你有用。
  • setBackgroundDrawable 是这里的关键!这是唯一提到它的答案。谢谢
  • 您好,我的活动中有多个布局,当我单击外部弹出窗口时,它没有被禁用,我还设置了 BackgrounDrawable 和 outsideTouchable。
【解决方案2】:

试试这个方法。

 cell.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            LayoutInflater layoutInflater  = 
                (LayoutInflater)ctx.getSystemService("layout_inflater");  
                View popupView = layoutInflater.inflate(R.layout.popup_window, null); 
                final PopupWindow popupWindow = new PopupWindow(ctx);

                popupWindow.setFocusable(true);
                popupWindow.setContentView(popupView);
                popupWindow.showAtLocation(b, Gravity.CENTER, 0, 0); 
                popupWindow.update(100, 100, 150, 150);
        }
    });

【讨论】:

    猜你喜欢
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    • 2018-08-20
    • 2014-06-26
    • 1970-01-01
    • 2020-10-05
    相关资源
    最近更新 更多