单击外部时,在Fragment中关闭PopupWindow

时间:2016-06-20 15:46:32

标签: java android android-popupwindow

我有PopupWindow的片段。我使用以下代码启动Popup:

    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(true); createPopup.setFocusable(true); 和类似的answers

我还检查了是否可以使用此createPopup.setBackgroundDrawable(newColorDrawable(Color.BLACK));以纯色填充弹出窗口后面的所有内容,以验证我是否有错误的核心代码,但它也没有帮助 - 所有与弹出布局无关的内容仍然可见。

2 个答案:

答案 0 :(得分:0)

在外面触摸时关闭弹出窗口 - 当失去焦点时

print $dom->toString(1);

删除默认的黑色背景

createPopup.setOutsideTouchable(true);
createPopup.setFocusable(true);

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

ShapeDrawable()

Same thread

答案 1 :(得分:0)

创建一个新的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>