Cette leçon explique comment masquer la barre d'état sur différentes versions Android Masquer la barre d'état (et éventuellement la barre de navigation) permet au utilisent davantage l'espace d'affichage, offrant ainsi une expérience utilisateur plus immersive.
La figure 1 illustre une application avec une barre d'état visible:
La figure 2 illustre 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
options WindowManager
. Vous pouvez le faire par programmation
définir un thème d'activité dans le fichier manifeste de votre application. Définir un thème d'activité dans le
fichier manifeste est l'approche à privilégier si la barre d'état doit toujours
caché dans votre application (bien qu'à proprement parler, vous pouvez ignorer
thème si vous le souhaitez). 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 par programmation.
- Cela permet des transitions d'interface utilisateur plus fluides, car le système dispose des informations dont il a besoin pour afficher votre UI avant d'instancier l'activité principale de votre application.
Vous pouvez également définir des options WindowManager
de manière automatisée.
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
de façon programmatique), les indicateurs restent actifs, sauf si votre application les supprime.
Vous pouvez utiliser
FLAG_LAYOUT_IN_SCREEN
pour que la mise en page de votre activité utilise la même zone d'écran que celle qui est disponible lorsque vous avez activé
FLAG_FULLSCREEN
Cela permet d'éviter
contenu du redimensionnement 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 procédant comme suit :
avec setSystemUiVisibility()
.
setSystemUiVisibility()
définit les indicateurs d'interface utilisateur au niveau
au niveau de la vue individuelle ; ces paramètres sont agrégés au niveau de la fenêtre. En utilisant
setSystemUiVisibility()
pour définir des indicateurs d'interface utilisateur
vous offre un contrôle plus précis sur les barres système
options 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 les indicateurs d'interface utilisateur effacés (par exemple, en quittant activité), votre application doit les réinitialiser si vous souhaitez masquer à nouveau les barres. Consultez la section Répondre aux changements de visibilité de l'interface utilisateur pour découvrir sur la manière d'écouter les changements de visibilité de l'UI afin que votre application puisse réagir en conséquence.
- L'endroit où vous définissez les indicateurs d'interface utilisateur fait la différence. Si vous masquez les barres système dans les
onCreate()
et que l'utilisateur appuie sur Accueil, les barres système réapparaître. Lorsque l'utilisateur rouvre l'activité,onCreate()
ne seront pas appelés, les barres système resteront visibles. Si vous souhaitez que les modifications de l'UI du système persistant lorsque l'utilisateur accède à votre activité et 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, des signalements
défini avec
setSystemUiVisibility()
à supprimer.
Faire apparaître le contenu derrière la barre d'état
Sur Android 4.1 ou version ultérieure, vous pouvez définir le contenu de votre application pour qu'il apparaisse derrière
la barre d'état, de sorte que le contenu ne se redimensionne pas lorsque la barre d'état est masquée ou affichée.
Pour ce faire, utilisez
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
Vous devrez peut-être aussi utiliser
SYSTEM_UI_FLAG_LAYOUT_STABLE
pour que votre appli conserve
une mise en page stable.
Lorsque vous utilisez cette approche, il est de votre responsabilité de vous assurer que les parties critiques
de l'interface utilisateur de votre application (les commandes intégrées à une application Maps, par exemple) ne sont pas
n’est couverte par
les barres système. Cela pourrait rendre votre application inutilisable. Dans la plupart des cas, vous pouvez
gérez cela en ajoutant l'attribut android:fitsSystemWindows
à votre fichier de mise en page XML, défini sur
true
Cela permet d'ajuster la marge intérieure de l'élément parent ViewGroup
.
afin de laisser de la place
pour les fenêtres du système. Cela suffit pour la plupart des applications.
Toutefois, dans certains cas, vous devrez peut-être modifier la marge intérieure par défaut pour obtenir la
pour votre application. Pour manipuler directement la façon dont
est affiché par rapport aux barres système (qui occupent un espace appelé "fenêtre"
"encarts de contenu"), remplacer fitSystemWindows(Rect insets)
.
La méthode fitSystemWindows()
est appelée par la méthode
la hiérarchie des vues lorsque les encarts de contenu d'une fenêtre ont été modifiés, afin de permettre à celle-ci de
adapter son contenu en conséquence. En remplaçant cette méthode, vous pouvez gérer
d'encarts (et donc de la mise en page de votre application) comme vous le souhaitez.