Отключить всплывающее окно во фрагменте при щелчке снаружи

У меня есть фрагмент с 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());

Та же нить

Другие вопросы по тегам