Отключить всплывающее окно во фрагменте при щелчке снаружи
У меня есть фрагмент с 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);
и подобные ответы.
Я также проверил, могу ли я заполнить все за всплывающее окно сплошным цветом, используя эту createPopup.setBackgroundDrawable(newColorDrawable(Color.BLACK));
, чтобы убедиться, что у меня неправильный код ядра, но это тоже не помогло - все, что не связано с макетом всплывающих окон, оставалось видимым.
2 ответа
Создайте новый стиль 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>
Все, что вам нужно сделать после создания темы, это применить ее к фрагментации в манифесте.
<activity android:name=".PopupWindow" android:theme="@style/AppTheme.PopupWindow"></activity>
Закрывает всплывающее окно при касании за его пределами - когда теряет фокус
createPopup.setOutsideTouchable(true);
createPopup.setFocusable(true);
Удаляет черный фон по умолчанию
createPopup.setBackgroundDrawable(new ShapeDrawable());
если ShapeDrawable()
не работал использовать этот
createPopup.setBackgroundDrawable(new BitmapDrawable());