Java 单击外部时,在片段中关闭PopupWindow

Java 单击外部时,在片段中关闭PopupWindow,java,android,android-popupwindow,Java,Android,Android Popupwindow,我有一个带有PopupWindow的片段。我使用以下代码启动弹出窗口: private PopupWindow createPopup; private void initiateWindow(){ try { LayoutInflater inflater = (LayoutInflater) getActivity() .getSystemService(Context.LAYOUT_INFLA

我有一个带有PopupWindow的片段。我使用以下代码启动弹出窗口:

    private PopupWindow createPopup;

    private void initiateWindow(){
        try {
            LayoutInflater inflater = (LayoutInflater) getActivity()
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View layout = inflater.inflate(R.layout.window_popup,
                    (ViewGroup) v.findViewById(R.id.popup_element));
            DisplayMetrics displaymetrics = new DisplayMetrics();
            getActivity().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
            int height = displaymetrics.heightPixels;
            int width = displaymetrics.widthPixels;


            createPopup = new PopupWindow(layout, width/2 + width/4, height/3, true);
            createPopup.showAtLocation(layout, Gravity.CENTER, 0, 0);


} catch (Exception e) {
        e.printStackTrace();
        }
        }
它运行得非常好。我想在每次单击外部时关闭窗口。这是一件很常见的事情,所以在互联网上有很多关于这个主题的教程和问题。问题是,它们都不起作用

我尝试使用
createPopup.setBackgroundDrawable(newColorDrawable(Color.TRANSPARENT));
createPopup.setOutsideTouchable(真);
createPopup.setFocusable(true)
类似的


我还检查了是否可以使用这个
createPopup.setBackgroundDrawable(newColorDrawable(color.BLACK)),用纯色填充弹出窗口后面的所有内容,以验证我是否得到了错误的核心代码,但这也没有帮助-所有与弹出式布局无关的内容都保持可见。

当触摸到弹出式窗口外部时-当失去焦点时,关闭弹出式窗口

createPopup.setOutsideTouchable(true);
createPopup.setFocusable(true);
删除默认的黑色背景

createPopup.setBackgroundDrawable(new ShapeDrawable());
如果
ShapeDrawable()
无效,请使用此选项

createPopup.setBackgroundDrawable(new BitmapDrawable());

当在弹出窗口外触摸时关闭弹出窗口-当焦点松开时

createPopup.setOutsideTouchable(true);
createPopup.setFocusable(true);
删除默认的黑色背景

createPopup.setBackgroundDrawable(new ShapeDrawable());
如果
ShapeDrawable()
无效,请使用此选项

createPopup.setBackgroundDrawable(new BitmapDrawable());

创建一个新的xml样式,如下所示

<style name="AppTheme.PopupWindow">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowCloseOnTouchOutside">true</item>
</style>

假的
真的
真的
真的
创建主题后,您需要做的就是将其应用于清单中的fragmentactivity

<activity android:name=".PopupWindow" android:theme="@style/AppTheme.PopupWindow"></activity>

创建一个新的xml样式,如下所示

<style name="AppTheme.PopupWindow">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowCloseOnTouchOutside">true</item>
</style>

假的
真的
真的
真的
创建主题后,您需要做的就是将其应用于清单中的fragmentactivity

<activity android:name=".PopupWindow" android:theme="@style/AppTheme.PopupWindow"></activity>


当在其外部单击时,它将自动关闭。没有关闭吗?好的没问题什么弹出窗口包含什么视图文本视图?我不太明白你的要求。无论如何,我已经提供了所有可能影响弹出窗口本身的代码。我计划使用foucs change listener,但不需要它。当在弹出窗口外单击时,它将自动关闭。没有关闭吗?好的没问题什么弹出窗口包含什么视图文本视图?我不太明白你的要求。无论如何,我已经提供了所有可能影响弹出窗口本身的代码。我计划使用foucs change listener,但不需要。我已经尝试过这种方法。我试着添加黑色背景来检查是否真的有背景——不幸的是没有。看这里,我已经尝试过这种方法。我尝试添加黑色背景以检查是否确实存在背景-不幸的是没有。请参见此处.java类是
Fragment
not
FragmentActivity
。它没有在清单中声明.java类是
Fragment
而不是
FragmentActivity
。它没有在舱单上声明。