Иммерсивный полноэкранный режим ниже 4.4
У меня есть приложение, которое я хочу запустить в полноэкранном режиме. Если у меня есть устройство с 4.4 KitKat, легко установить SYSTEM_UI_FLAG_IMMERSIVE
, чтобы приложение стало чистым полноэкранным.
Однако, если у меня есть устройство с более низким API, чем 4.4. Я понятия не имею, как сделать его полноэкранным, как будто это KitKat с поддержкой Immersive.
Я могу установить полноэкранный режим и скрыть навигационные флаги, чтобы приложение перешло в полноэкранный режим, но как только на экран щелкнут, эти флаги reset и теперь будут отображаться как панель навигации, так и строка состояния.
Есть ли решение, в котором я могу "имитировать" режим immersive на устройствах с JB и, возможно, ICS (не обязательно ниже).
У меня есть метод hideSystemUI, который запускается при срабатывании OnSystemUiVisibilityChangeListener
триггеров, которые выглядят так на данный момент.
private void hideSystemUI() {
actionBar.hide();
isMenuVisible = false;
if (currentapiVersion >= android.os.Build.VERSION_CODES.KITKAT){
mDecorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| 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);
}
else{
mDecorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN);
}
}
Какие изменения мне нужно сделать, чтобы приложение перешло в полноэкранный режим и не отображало навигационную панель и панель состояния при каждом нажатии, а скорее на слайде сверху или снизу.
Ответы
Ответ 1
Это будет так близко, как вы собираетесь:
if (Build.VERSION.SDK_INT >= 19) {
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
} else {
if (Build.VERSION.SDK_INT > 10) {
findViewById(android.R.id.content).setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
}
}
И не поддерживайте устройства с SDK менее 10. Эти шутеры должны все равно получить современный андроид.
Ответ 2
Я столкнулся с такой же ситуацией, и после некоторых исследований я понял, что из-за проблем с безопасностью это невозможно ниже 4.4, поэтому старые API не поддерживают скрытие панели навигации так, как вы хотите.
Несмотря на то что из API 4.1 вы используете флаг SYSTEM_UI_FLAG_LAYOUT_STABLE, ваш макет не будет изменяться, и он будет завышен за панель навигации, но вам нужно убедиться, что ни один из ваших важных компонентов пользовательского интерфейса не покрыт им.
https://developer.android.com/training/system-ui/immersive.html
Надеюсь, это поможет..:)
Ответ 3
просто скопируйте код ниже кода в значение /style.xml.
<resources>
<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<item name="android:windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>
Ответ 4
Существует два метода для режима погружения
Чтобы сделать его неподвижным, измените строку
View.SYSTEM_UI_FLAG_IMMERSIVE
По этой строке -
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY