Méthode via le thème (Theme)
Cette approche est idéale pour appliuqer une barre d'état immersive à plusieurs activités de votre application. Deux fichiers de styles distincts sont nécessaires pour assurer la compatibilité.
Pour Android 4.4 (API 19), créez un fichier styles.xml dans res/values-v19/ avec le contenu suivant :
<style name="AppTheme.FullScreen" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
</style>
Pour Android 5.0 et supérieur (API 21), créez un fichier styles.xml dans res/values-v21/ avec le contenu suivant :
<style name="AppTheme.FullScreen" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowTranslucentStatus">false</item>
<item name="android:windowTranslucentNavigation">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
Dans votre fichier res/values/styles.xml principal, définissez un style de base vide pour le même nom :
<style name="AppTheme.FullScreen" parent="Theme.AppCompat.Light.NoActionBar"></style>
Pour garantir que le contenu ne se superpose pas à la barre de statut, ajoutez cet attribut à la racine de vos fichiers de mise en page XML :
android:fitsSystemWindows="true"
Appliquez ensuite ce thème dans votre fichier AndroidManifest.xml au niveau de l'activité concernée ou de l'appliaction entière.
Méthode programmatique (Code)
Cette méthode est utile pour un contrôle ponctuel au sein d'une seule activité. Le code suivant doit être exécuté dans la méthode onCreate() de votre activité, avant l'appel à setContentView().
private void enableImmersiveMode() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window activityWindow = getWindow();
activityWindow.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
| WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
activityWindow.getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
activityWindow.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
activityWindow.setStatusBarColor(Color.TRANSPARENT);
activityWindow.setNavigationBarColor(Color.TRANSPARENT);
}
}
N'oubliez pas de désactiver l'ActionBar si votre thème en inclut une, en utilisant getSupportActionBar()?.hide() ou en définissant un thème sans ActionBar.