У меня есть действие, которое может перейти в 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 должен настроить представления на экране, когда он отображает экранные полосы.