Méthode n ° 1:
Pour obtenir une barre d'état complètement transparente, vous devez utiliser statusBarColor
, qui n'est disponible que sur l'API 21 et supérieur. windowTranslucentStatus
est disponible sur l'API 19 et au-dessus, mais il ajoute un arrière-plan teinté pour la barre d'état. Cependant, le paramétrage windowTranslucentStatus
réalise une chose que le passage statusBarColor
à transparent ne permet pas: il définit les indicateurs SYSTEM_UI_FLAG_LAYOUT_STABLE
et SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
. Le moyen le plus simple d'obtenir le même effet est de définir manuellement ces indicateurs, ce qui désactive efficacement les inserts imposés par le système de mise en page Android et vous laisse vous débrouiller seul.
Vous appelez cette ligne dans votre onCreate
méthode:
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
Assurez-vous également de définir la transparence dans /res/values-v21/styles.xml:
<item name="android:statusBarColor">@android:color/transparent</item>
Ou définissez la transparence par programme:
getWindow().setStatusBarColor(Color.TRANSPARENT);
Le bon côté de cette approche est que les mêmes mises en page et conceptions peuvent également être utilisées sur l'API 19 en remplaçant la barre d'état transparente par la barre d'état translucide teintée.
<item name="android:windowTranslucentStatus">true</item>
Méthode n ° 2:
Si vous avez seulement besoin de peindre une image d'arrière-plan sous votre barre d'état, au lieu de positionner une vue derrière, cela peut être fait en définissant simplement l'arrière-plan du thème de votre activité sur l'image souhaitée et en définissant la transparence de la barre d'état comme indiqué dans la méthode # 1. C'est la méthode que j'ai utilisée pour créer les captures d'écran de l' article Android Police d'il y a quelques mois.
Méthode n ° 3:
Si vous devez ignorer les inserts système standard pour certaines mises en page tout en les faisant fonctionner dans d'autres, le seul moyen viable de le faire est de travailler avec la ScrimInsetsFrameLayout
classe souvent liée . Bien sûr, certaines des choses effectuées dans cette classe ne sont pas nécessaires pour tous les scénarios. Par exemple, si vous ne prévoyez pas d'utiliser la superposition de la barre d'état synthétique, commentez simplement tout dans la init()
méthode et ne vous souciez pas d'ajouter quoi que ce soit au fichier attrs.xml. J'ai vu cette approche fonctionner, mais je pense que vous constaterez qu'elle apporte d'autres implications qui peuvent demander beaucoup de travail à contourner.
J'ai également vu que vous vous opposez à l'encapsulation de plusieurs mises en page. Dans le cas de l'encapsulation d'une disposition à l'intérieur d'une autre, où les deux ont match_parent
pour la hauteur et la largeur, les implications sur les performances sont trop triviales pour être préoccupées. Quoi qu'il en soit, vous pouvez éviter complètement cette situation en changeant la classe à partir de laquelle elle s'étend FrameLayout
vers tout autre type de classe Layout que vous aimez. Cela fonctionnera très bien.
android:fitsSystemWindows="true"