Masquer la barre d'état

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:

barres système

Figure 1 : 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.

barres système

Figure 2. Barre d'état masquée.

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 dans onResume() ou onWindowFocusChanged().
  • 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.