Como posso evitar que o Nav Bar deixe para trás um bar preto? (modo de imersão)

um aplicativo que usa o modo imersivo deixa uma barra preta no fundo do ecrã quando o aplicativo é devolvido depois de esperar um tempo (a atividade é destruída).

O que está a acontecer: (activei a opção do programador: "não mantenha as actividades" para reproduzir isto).

  1. lançamento pela primeira vez da aplicação. O modo de imersão funciona como esperado.

  2. subir para revelar a barra de navegação 'pegajosa' imersiva, e usar o botão 'Home' para deixar a aplicação. Fundo da barra de navegação mostra brevemente um fundo preto antes do aplicativo fechar.

  3. Use o botão 'Recents', e selecione o aplicativo para retomá-lo.

  4. o aplicativo abre para revelar brevemente a barra de navegação sobre um bar preto. A ui do sistema entra em colapso em modo imersivo, mas a barra preta permanece. systemuiblackbar

Este insecto também só aparece no Chupa-Chupa, não no KitKat.

Eu retirei o aplicativo para simplesmente lançar uma atividade fictícia sem nenhuma funcionalidade além de configuração das opções UI do sistema:

public class DummyActivity extends FragmentActivity {

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus) {
        setSystemUiVisibility();
    }
}

public void setSystemUiVisibility() {
    if (getWindow() != null && getWindow().getDecorView() != null) {
        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_STICKY);
        }
    }
}

editar: Depois de criar um novo projeto com apenas esta atividade, eu vi este problema reproduzido ao usar um tema aplicativo estendendo " android: Tema.Holo"..., e corrigiu o problema neste projeto de amostra quando eu extendo o tema do Material em vez disso:

Alteração

<style name="AppTheme" parent="android:Theme.Holo.Light.NoActionBar.Fullscreen">
</style>

a

<style name="AppTheme"parent="android:Theme.Material.Light.NoActionBar.Fullscreen">
</style>
Infelizmente, esta solução não resolveu os problemas do meu projecto principal, mas aproxima-me de uma solução e pode ajudar outros com o mesmo problema.

Author: ITJscott, 2015-02-24

2 answers

Estava a ter o mesmo problema. Aqui estão algumas atualizações que eu fiz que o fizeram desaparecer. Espero que um destes funcione para ti!

Activity_main.xml

android:fitsSystemWindows="false"

Estilo-v21

<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowSharedElementsUseOverlay">false</item>

Actividade principal.java

getWindow().getDecorView().setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                    | View.SYSTEM_UI_FLAG_FULLSCREEN
    );
 2
Author: Nick, 2016-06-15 23:43:18

Usando

<style name="AppTheme"parent="android:Theme.Material.Light.NoActionBar.Fullscreen"> </style>

Resolveu o problema, mas só funciona para api:21.

Para que funcione para todo o sistema. Você pode criar um diretório chamado style-v21 no diretório res, e colocar esse estilo.xml ali. Sistema Android é inteligente o suficiente para escolher qual usar para telefone novo ou velho.

 1
Author: Ogosoka, 2016-08-01 07:34:40