Java 单击外部时,在片段中关闭PopupWindow
我有一个带有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
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
notFragmentActivity
。它没有在清单中声明.java类是Fragment
而不是FragmentActivity
。它没有在舱单上声明。