Android Dismissing PopupWindow单击“外部”可以取消弹出菜单的方式

Android Dismissing PopupWindow单击“外部”可以取消弹出菜单的方式,android,android-popupwindow,Android,Android Popupwindow,我为平板电脑开发了一个Android应用程序。当用户点击设置按钮时,我想在屏幕右上角向用户显示一个对话框,在那里可以配置设置 由于对话框比较复杂,我觉得PopupWindow比PopupMenu更合适。PopupMenu有一个很好的行为,当用户在菜单外单击时,它会自动取消。我怎样才能让Poppuphindow也这样做 val popupView = layoutInflater.inflate(R.layout.popup_window, null)

我为平板电脑开发了一个Android应用程序。当用户点击设置按钮时,我想在屏幕右上角向用户显示一个对话框,在那里可以配置设置

由于对话框比较复杂,我觉得PopupWindow比PopupMenu更合适。PopupMenu有一个很好的行为,当用户在菜单外单击时,它会自动取消。我怎样才能让Poppuphindow也这样做

            val popupView = layoutInflater.inflate(R.layout.popup_window, null)
            val popupWindow = PopupWindow(
                popupView,
                ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT
            )
            popupWindow.showAsDropDown(appCompactImageButton, 20, 0)
我看到弹出菜单关闭时,你们触摸外面,当你们点击后退按钮。因此,要使PopupWindow像您应该使用的PopupMenu一样关闭

popupWindow.isFocusable = true
// or you can send focusable when initialize PopupWindow because they have constructor like PopupWindow(View contentView, int width, int height, boolean focusable) 

您可以查看此处,了解我们为什么要使用isFocusable。

//在触摸外部时关闭弹出窗口

mPopupWindow.setOutsideTouchable(true);
//将focusable设置为popup window(弹出窗口),以便在触摸时关闭窗口

mPopupWindow.setFocusable(true);
//如果要删除默认背景

mPopupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
setOutsideTouchableboolean touchable控制弹出窗口 将在其窗口外通知触摸事件

setFocusableboolean可聚焦 更改弹出窗口的焦点

setBackgroundDrawableDrawable背景指定背景 可为此弹出窗口绘制

您只需设置PopupWindow的setBackgroundDrawable和setOutsideTouchable属性,如果您在窗口外部触摸,则应关闭窗口

PopupWindow popupWindow = new PopupWindow(contentView, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
popupWindow.setBackgroundDrawable(new ColorDrawable());
popupWindow.setOutsideTouchable(true);

这个问题看起来很相似:注意:调用集合似乎很重要。。。在popupWindow.showAsDropDown之前。是的,如果在popupWindow.showAsDropDown之后调用这些属性,则必须调用popupWindow.update