Автоматическое закрытие всплывающего окна на Android 10 - PullRequest
1 голос
/ 13 марта 2020

Мое всплывающее окно должно автоматически закрываться при щелчке снаружи. Я уже прочитал эту топи c и установил фон для рисования в окне. Вот мой код:

    protected int showPopupWindow(final int popupWidth) {

        hideCalendarCellPopupWindow();

        final LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(LAYOUT_INFLATER_SERVICE);
        final View popupView = inflater.inflate(R.layout.popup_calendar_cell, null);

        mCalendarCellPopupWindow = new PopupWindow(popupView, popupWidth, ViewGroup.LayoutParams.WRAP_CONTENT);
        mCalendarCellPopupWindow.setBackgroundDrawable(new ColorDrawable(Color.WHITE));
        mCalendarCellPopupWindow.setOutsideTouchable(true);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            mCalendarCellPopupWindow.setElevation(...);
        }

        mCalendarCellPopupWindow.showAtLocation(....);
    }

    private hideCalendarCellPopupWindow() {
        if (mCalendarCellPopupWindow != null) {
            mCalendarCellPopupWindow.dismiss();
            mCalendarCellPopupWindow = null;
        }
    }

На Android 10 возникла проблема: вы можете коснуться экрана телефона и провести пальцем по экрану, в то время как «последние приложения» могут отображаться с такой жест.

Так что моя проблема в том, что когда я немного провожу пальцем снизу вверх, а затем go вниз - всплывающее окно не закрывается, более того, оно больше не может быть отклонено. , так как его свойство isShowing() возвращает false. Я пытался вызвать popupWindow.dismiss() метод внутри onPause(), но в такой ситуации он также не вызывается.
Эта скринкаст может объяснить проблему с дополнительными возможностями: https://youtu.be/w2cQMvFMYkk

Каким может быть обходной путь?

1 Ответ

0 голосов
/ 13 марта 2020

Если вы хотите отклонить всплывающее окно снаружи, вы можете установить следующее:

popupWindow.setFocusable(true);
popupWindow.setTouchable(true);
popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
popupWindow.setOutsideTouchable(true);
popupWindow.update();
...