web-dev-qa-db-fra.com

Superposition de la barre de statut Android avec ActionBar

Je sais que je peux créer la superposition de la barre d’action avec requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY)
et peut basculer/afficher la barre d'état sur mon écran (en passant de FLAG_FULLSCREEN à FLAG_FORCE_NOT_FULLSCREEN).
Cela fonctionne très bien. Cependant, je ne veux pas que ma présentation soit déplacée lorsque je bascule la barre d'état.

Je sais que je peux faire en sorte que la barre d'état "superpose" (bien que pas de manière transparente) le contenu en utilisant:

WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREENWindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS

Cela fonctionne également très bien, à l'exception de la conséquence (attendue) selon laquelle, lorsque vous utilisez une barre d'action, celle-ci est réduite de moitié - la moitié se trouve sous la barre d'état.

Je me demande donc s'il existe un moyen de "déplacer la barre d’action vers le bas" de la hauteur de la barre d’état dans ce cas.
Je sais que, dans le pire des cas, je peux le faire avec une vue personnalisée qui se trouve dans la présentation, mais je préfère ne pas le faire (je souhaite bénéficier de la barre d’action).

merci!

20
ahmedre

alors apparemment, vous pouvez le faire en Jellybean. google inclut deux exemples dans les documents api. voici un lien: http://developer.Android.com/reference/Android/view/View.html#setSystemUiVisibility%28int%29

summary: utilisez setSystemUiVisibility sur une vue pour basculer la visibilité (sur jellybean +).

4
ahmedre

Ce n'est pas parfait, mais voici comment j'ai réalisé ce que vous voulez:

Dans onCreate:

getWindow (). setFlags (WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

Ensuite:

private void hideStatusBar() {
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);

}

private void showStatusBar() {
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

}

J'ai aussi un style sur l'activité avec ce qui suit:

 <style name="readingStyle" parent="@style/Theme.Sherlock">
     <item name="Android:windowActionBarOverlay">true</item>  
     <item name="windowActionBarOverlay">true</item>       
 </style> 

Votre activité diminuera lorsque la barre d'état indiquera, mais je ne pense pas que ce soit trop visible.

3
David Scott

Mettez cette méthode dans l'activité de la méthode onCreate ():

getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);

se référer: link

0
huu duy

Pourquoi vous ne le faites pas dans le manifeste

Android:theme="@Android:style/Theme.Black.NoTitleBar"

que vous n'avez pas de barre d'état et plus d'espace pour la barre d'action?

0
Phil