Переходы в иммерсивный режим Android

У меня есть приложение для Android, которое использует режим погружения для всех действий, так что это полноэкранное приложение.

У меня есть класс BaseActivity, из которого распространяются все остальные действия. В этом упражнении я вызываю следующее, чтобы включить полноэкранный/иммерсивный режим.

HelmiBlankActivity:

private boolean apiLowerImmersive = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

   if(Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
        apiLowerImmersive = true;
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }

}


@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);

  if(hasFocus && !apiLowerImmersive ) {
        getWindow().getDecorView().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);
    }
}

В действиях это прекрасно работает, проблема в том, что при открытии нового действия (для каждого намерения) панель действий/заголовок отображается на короткое время, а затем снова скрывается, что кажется немного запаздывающим/глючным.

Приложение также имеет тему: styles.xml:

<style name="FullscreenTheme" parent="android:Theme.Holo.Light">
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowNoTitle">true</item>
</style>

Я также пытался применить android:Theme.Holo.Light.NoActionBar - безуспешно во время переходов. Я не смог ничего найти в stackoverflow (который, кстати, является отличным сообществом и помог мне со многими проблемами) или где-либо еще в Интернете, и был бы признателен за вашу помощь.


person gambo    schedule 09.12.2014    source источник


Ответы (1)


Если вы поместите этот фрагмент в метод onCreate(), ваши действия откроются с уже скрытыми полосами.

getWindow().getDecorView().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);

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

person grzebyk    schedule 12.01.2015
comment
Спасибо - получилось! О проблеме с полосами, которые не исчезают: это происходит только на нескольких устройствах - не могу найти никаких подсказок, в чем причины этого - person gambo; 29.01.2015
comment
Чтобы снова скрыть полосы автоматически, вы должны использовать SYSTEM_UI_FLAG_IMMERSIVE_STICKY вместо SYSTEM_UI_FLAG_IMMERSIVE. - person thiagolr; 10.08.2016