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).
lançamento pela primeira vez da aplicação. O modo de imersão funciona como esperado.
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.
Use o botão 'Recents', e selecione o aplicativo para retomá-lo.
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.
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.
2 answers
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
);
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.