Когда Android автоматически выходит из Immersive Sticky, он не изменяет размер представлений, поэтому они блокируются.

У меня есть действие, которое может перейти в Immersive Sticky Full Screen одним нажатием кнопки. Эта кнопка выполняет следующий код, чтобы перейти в полноэкранный режим Immersive Sticky.

getActivity().getWindow().getDecorView().setSystemUiVisibility(
      View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
    | View.SYSTEM_UI_FLAG_FULLSCREEN
    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);

Примечание. Я специально НЕ включаю следующий тег, как если бы я это сделал, он нарушает макет моего экрана, когда я выхожу из Immersive Sticky Full Screen. См. мой другой вопрос: Android, закрывающий полноэкранный режим внизу, отключается от экрана< /эм>

View.SYSTEM_UI_FLAG_LAYOUT_STABLE

Когда Android находится в Immersive Sticky Full Screen, когда отображается другое представление, например DialogFragment, AlertDialog, появляется клавиатура, Android автоматически выводит вас из Immersive Sticky Full Screen, показывая строку состояния и экранную панель навигации. Однако он НЕ изменяет размеры представлений в моем приложении, поэтому теперь мои представления находятся под панелью навигации, и я не могу получить доступ ни к одной из кнопок внизу экрана. Я тестировал с флагом «View.SYSTEM_UI_FLAG_LAYOUT_STABLE», и это не имеет значения, размеры представлений по-прежнему не изменяются.

Это кажется серьезным недостатком в поведении Android, и, конечно же, я делаю что-то не так. Как я могу заставить его изменять размер моих представлений, когда он отображает строку состояния и панель навигации?

Я могу обойти некоторые случаи, такие как всплывающие диалоговые окна, используя код в следующем вопросе SO, https://stackoverflow.com/a/24549869/2663916, но у меня есть много возможных вещей, которые могут всплывать в моем полноэкранном режиме, и я не хочу вставлять этот хак в каждом отдельном месте, чтобы он оставался в захватывающем полноэкранном режиме. Кроме того, когда появляется клавиатура, я ДЕЙСТВИТЕЛЬНО хочу, чтобы панель навигации появлялась.

Конечно, Android должен настроить представления на экране, когда он отображает экранные полосы.


person se22as    schedule 01.02.2018    source источник


Ответы (1)


Повторное чтение документов Google сделало очевидным, что причиной было включение следующих двух флагов.

View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN      // this STOPS Android resizing my view to be below the status bar when it is displayed
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION // this STOPS Android resizing my view to be above the nav bar when it is displayed

https://developer.android.com/training/system-ui/immersive.html "Рекомендуется включать другие системные флаги пользовательского интерфейса (такие как SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION и SYSTEM_UI_FLAG_LAYOUT_STABLE), чтобы предотвратить изменение размера содержимого при скрытии и отображении системных панелей. Также следует убедиться, что панель действий и другие При этом элементы управления пользовательского интерфейса скрываются."

person se22as    schedule 01.02.2018