Подтвердить что ты не робот

Иммерсивный полноэкранный режим ниже 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);
        }
}

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

4b9b3361

Ответ 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