Cette leçon explique comment masquer la barre d'état sur différentes versions d'Android. Si vous masquez la barre d'état (et éventuellement la barre de navigation), le contenu peut utiliser davantage l'espace d'affichage, ce qui offre une expérience utilisateur plus immersive.
La figure 1 montre une application avec une barre d'état visible:
La figure 2 montre une application dont la barre d'état est masquée. Notez que la barre d'action est également masquée. Vous ne devez jamais afficher la barre d'action sans la barre d'état.
Masquer la barre d'état sur Android 4.0 ou version antérieure
Vous pouvez masquer la barre d'état sur Android 4.0 (niveau d'API 14) ou version antérieure en définissant des indicateurs WindowManager
. Vous pouvez le faire par programmation ou en définissant un thème d'activité dans le fichier manifeste de votre application. Définir un thème d'activité dans le fichier manifeste de votre application est l'approche recommandée si la barre d'état doit toujours rester masquée dans votre application (bien que, strictement parlant, vous puissiez remplacer le thème par programmation si vous le souhaitez). Par exemple :
<application ... android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" > ... </application>
Les avantages de l'utilisation d'un thème d'activité sont les suivants:
- Cette méthode est plus facile à gérer et moins sujette aux erreurs que la définition d'un indicateur programmatique.
- Les transitions d'interface utilisateur sont plus fluides, car le système dispose des informations nécessaires pour afficher votre UI avant d'instancier l'activité principale de votre application.
Vous pouvez également définir des indicateurs WindowManager
de manière programmatique.
Cette approche permet de masquer et d'afficher plus facilement la barre d'état lorsque l'utilisateur interagit avec votre application:
Kotlin
class MainActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // If the Android version is lower than Jellybean, use this call to hide // the status bar. if (Build.VERSION.SDK_INT < 16) { window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN) } setContentView(R.layout.activity_main) } ... }
Java
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // If the Android version is lower than Jellybean, use this call to hide // the status bar. if (Build.VERSION.SDK_INT < 16) { getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); } setContentView(R.layout.activity_main); } ... }
Lorsque vous définissez des indicateurs WindowManager
(via un thème d'activité ou programmatique), ils restent actifs, sauf si votre application les supprime.
Vous pouvez utiliser FLAG_LAYOUT_IN_SCREEN
pour définir la mise en page de votre activité afin qu'elle utilise la même zone d'écran que celle qui est disponible lorsque vous avez activé FLAG_FULLSCREEN
. Cela évite que votre contenu soit redimensionné lorsque la barre d'état est masquée ou affichée.
Masquer la barre d'état sur Android 4.1 ou version ultérieure
Vous pouvez masquer la barre d'état sur Android 4.1 (niveau d'API 16) ou version ultérieure en utilisant setSystemUiVisibility()
.
setSystemUiVisibility()
définit des indicateurs d'interface utilisateur au niveau de chaque vue. Ces paramètres sont agrégés au niveau de la fenêtre. L'utilisation de setSystemUiVisibility()
pour définir des indicateurs d'interface utilisateur vous offre un contrôle plus précis sur les barres système que l'utilisation d'indicateurs WindowManager
. Cet extrait de code masque la barre d'état:
Kotlin
// Hide the status bar. window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN // Remember that you should never show the action bar if the // status bar is hidden, so hide that too if necessary. actionBar?.hide()
Java
View decorView = getWindow().getDecorView(); // Hide the status bar. int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(uiOptions); // Remember that you should never show the action bar if the // status bar is hidden, so hide that too if necessary. ActionBar actionBar = getActionBar(); actionBar.hide();
Remarques :
- Une fois que les indicateurs d'interface utilisateur ont été supprimés (par exemple, en quittant l'activité), votre application doit les réinitialiser si vous souhaitez masquer à nouveau les barres. Pour découvrir comment écouter les changements de visibilité de l'UI afin que votre application puisse réagir en conséquence, consultez la section Répondre aux changements de visibilité de l'UI.
- L'emplacement où vous définissez les indicateurs de l'interface utilisateur fait une différence. Si vous masquez les barres système dans la méthode
onCreate()
de votre activité et que l'utilisateur appuie sur Accueil, elles réapparaîtront. Lorsque l'utilisateur rouvre l'activité,onCreate()
n'est pas appelé. Par conséquent, les barres système restent visibles. Si vous souhaitez que les modifications de l'UI du système persistent lorsque l'utilisateur accède à votre activité ou la quitte, définissez des indicateurs d'interface utilisateur dansonResume()
ouonWindowFocusChanged()
. - La méthode
setSystemUiVisibility()
n'a d'effet que si la vue à partir de laquelle vous l'appelez est visible. - Si vous quittez la vue, les indicateurs définis avec
setSystemUiVisibility()
seront effacés.
Faire apparaître le contenu derrière la barre d'état
Sur Android 4.1 et versions ultérieures, vous pouvez définir le contenu de votre application pour qu'il s'affiche derrière la barre d'état, afin qu'il ne soit pas redimensionné lorsque la barre d'état est masquée et affichée.
Pour ce faire, utilisez SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
.
Vous devrez peut-être également utiliser SYSTEM_UI_FLAG_LAYOUT_STABLE
pour aider votre application à conserver une mise en page stable.
Lorsque vous utilisez cette approche, il vous incombe de vous assurer que les parties critiques de l'interface utilisateur de votre application (par exemple, les commandes intégrées dans une application Maps) ne sont pas couvertes par des barres système. Cela pourrait rendre votre application inutilisable. Dans la plupart des cas, vous pouvez résoudre ce problème en ajoutant l'attribut android:fitsSystemWindows
à votre fichier de mise en page XML, en le définissant sur true
. Cela ajuste la marge intérieure du ViewGroup
parent afin de laisser de l'espace pour les fenêtres système. C'est suffisant pour la plupart des applications.
Toutefois, dans certains cas, vous devrez peut-être modifier la marge intérieure par défaut afin d'obtenir la mise en page souhaitée pour votre application. Pour manipuler directement la mise en page de votre contenu par rapport aux barres système (qui occupent un espace appelé "encarts de contenu" de la fenêtre), remplacez fitSystemWindows(Rect insets)
.
La méthode fitSystemWindows()
est appelée par la hiérarchie des vues lorsque les encarts de contenu d'une fenêtre ont été modifiés, pour permettre à la fenêtre d'ajuster son contenu en conséquence. En remplaçant cette méthode, vous pouvez gérer les encarts (et donc la mise en page de votre application) comme vous le souhaitez.