J'ai défini ma couleur statusBar sur transparent pour Lollipop uniquement avec la ligne suivante dans mon thème:
<item name="android:statusBarColor">@android:color/transparent</item>
Maintenant, j'ai besoin de dessiner derrière, mais je ne peux pas obtenir de vue derrière. Je sais comment le faire avec la windowTranslucentStatus
propriété, mais je ne veux pas utiliser cette propriété car elle ignorera alors la couleur du statusBar défini sur transparent.
android:fitsSystemWindows="true"
Réponses:
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étragewindowTranslucentStatus
réalise une chose que le passagestatusBarColor
à transparent ne permet pas: il définit les indicateursSYSTEM_UI_FLAG_LAYOUT_STABLE
etSYSTEM_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:Assurez-vous également de définir la transparence dans /res/values-v21/styles.xml:
Ou définissez la transparence par programme:
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.
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 lainit()
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'étendFrameLayout
vers tout autre type de classe Layout que vous aimez. Cela fonctionnera très bien.la source
SYSTEM_UI_FLAG_LAYOUT_STABLE
etSYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
était la solution que je recherchais.CollapsingToolbarLayout
etToolbar
: la barre d'état ne reste pas entièrement translucide etandroid:statusBarColor
ne prend aucun effetCela a fonctionné pour mon cas
Pour plus d'informations sur l'utilisation des barres d'état: youtube.com/watch?v=_mGDMVRO3iE
la source
Essayez ce thème
Assurez-vous que votre mise en page
la source
android:fitsSystemWindows="false"
coupe la barre d'outils en deux.Au lieu de
Utilisez le suivant:
Et assurez-vous de supprimer le rembourrage supérieur (qui est ajouté par défaut) sur votre disposition «MainActivity».
Notez que cela ne rend pas la barre d'état totalement transparente, et il y aura toujours une superposition "noir délavé" sur votre barre d'état.
la source
<item name="android:windowTranslucentStatus">true</item>
, Android met un fond noir fané sous la barre d'état, ce qui n'est pas ce que je recherche. Mais comment ne pas avoir ce fond noir fané?La solution de Cody Toombs a presque fait l'affaire pour moi. Je ne sais pas si cela est lié à Xamarin ou non, mais j'ai maintenant une solution acceptable:
Voici ma configuration:
J'ai un projet Android où j'ai référencé les packages Android.Support v4 et v7. J'ai deux styles définis:
values / styles.xml:
values-v21 / styles.xml:
AndroidManifest cible "MyStyle":
AndroidManifest.xml:
Et enfin le code dans l'activité principale:
Notez que j'ai défini le drapeau DrawsSystemBarBackgrounds, cela fait toute la différence
J'ai passé beaucoup de temps à bien faire les choses, trop de temps en fait. Espérons que cette réponse aide quiconque essaie de réaliser la même chose.
la source
android:windowTranslucentStatus
nécessite le niveau d'API 19 ou supérieur, comment est-il possible que vous l'utilisiez sur votre values / styles.xml tout en ayant unandroid:minSdkVersion
de 10?La réponse de @Cody Toombs a conduit à un problème qui amène la mise en page derrière la barre de navigation. Donc ce que j'ai trouvé utilise cette solution donnée par @Kriti
voici l'extrait de code Kotlin pour le même:
Vous devez également ajouter
vue racine de votre mise en page.
la source
J'ai eu le même problème alors je crée ImageView qui s'inspire de l'API de la barre d'état 19+
Définir une image personnalisée derrière la barre d'état gist.github.com
la source
Vous pouvez utiliser ScrimInsetFrameLayout
https://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ui/widget/ScrimInsetsFrameLayout.java
android: fitsSystemWindows = "true" doit être défini sur la mise en page canevas!
la source
RelativeLayout
au lieu de aFrameLayout
?Similaire à certaines des solutions publiées, mais dans mon cas, j'ai rendu la barre d'état transparente et j'ai corrigé la position de la barre d'action avec une marge négative
Et j'ai utilisé dans la barre d'outils et la vue racine
la source
Il existe une bonne bibliothèque StatusBarUtil de @laobie qui aide à dessiner facilement une image dans la StatusBar.
Ajoutez simplement votre
build.gradle
:Puis dans l'ensemble d'activités
Dans la mise en page
Pour plus d'informations, téléchargez une démo ou un clonage à partir de la page github et jouez avec toutes les fonctionnalités.
Remarque: Support KitKat et supérieur.
J'espère que cela aide quelqu'un d'autre!
la source
Avec Android Studio 1.4, le projet de modèle avec le code de la plaque chauffante définit le
Overlay
thème sur votre AppbarLayout et / ou Toolbar. Ils sont également définis pour être rendus derrière la barre d'état parfitSystemWindow
attribut = true. Cela entraînera uniquement le rendu de la barre d'outils directement sous la barre d'état et tout le reste sera rendu sous la barre d'outils. Les solutions proposées ci-dessus ne fonctionneront donc pas toutes seules. Vous devrez apporter les modifications suivantes.Mettez le code suivant dans votre styles-21.xml fichier .
@android: couleur / transparent
Attribuez ce thème à l'activité contenant le tiroir de navigation dans le fichier AndroidManifest.xml .
Cela rendra le tiroir de navigation derrière la barre d'état transparente.
la source
Tout ce que vous avez à faire est de définir ces propriétés dans votre thème
la source
La réponse acceptée a fonctionné pour moi en utilisant un CollapsingToolbarLayout. Il est important de noter cependant que cela
setSytstemUiVisibility()
remplace tous les appels précédents à cette fonction. Donc, si vous utilisez cette fonction ailleurs pour la même vue, vous devez inclure les indicateursView.SYSTEM_UI_FLAG_LAYOUT_STABLE
etView.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
, sinon ils seront remplacés par le nouvel appel.C'était le cas pour moi, et une fois que j'ai ajouté les deux drapeaux à l'autre endroit où j'appelais
setSystemUiVisibility()
, la réponse acceptée a parfaitement fonctionné.la source
J'ajouterai plus d'informations ici. Les derniers développements Android ont rendu assez facile la gestion de nombreux cas dans la barre d'état. Voici mes observations du
styles.xml
<item name="android:windowTranslucentStatus">true</item>
la barre d'état sera transparente et s'affichera devant l'interface utilisateur. Votre activité occupera tout l'espace du haut.Couleur d'arrière-plan : encore une fois, pour SDK 21+,
<item name="android:statusBarColor">@color/your_color</item>
donnera simplement une couleur à votre barre d'état, sans rien affecter d'autre.Cependant, dans les appareils plus récents (Android M / +), les icônes ont commencé à se présenter dans différentes nuances. Le système d'exploitation peut donner une nuance de gris plus foncée aux icônes du SDK 23 / +, si vous remplacez votre
styles.xml
fichier dans levalues-23
dossier et ajoutez<item name="android:windowLightStatusBar">true</item>
.De cette façon, vous fournirez à votre utilisateur une barre d'état plus visible, si votre barre d'état a une couleur claire (pensez à la façon dont beaucoup d'applications Google ont un arrière-plan clair alors que les icônes y sont visibles dans une couleur grisâtre).
Je vous suggère d'utiliser ceci, si vous donnez de la couleur à votre barre d'état via le point # 2
Dans les appareils les plus récents, le SDK 29 / + est livré avec un thème clair et sombre à l'échelle du système, contrôlable par l'utilisateur. En tant que développeurs, nous sommes également censés remplacer notre fichier de style dans un nouveau
values-night
dossier, pour donner à l'utilisateur 2 expériences différentes.Là encore, j'ai trouvé que le point n ° 2 était efficace pour fournir la "couleur d'arrière-plan à la barre d'état". Mais le système ne changeait pas la couleur des icônes de la barre d'état pour mon application. puisque ma version du jour du style consistait en un thème plus léger, cela signifie que les utilisateurs souffriront d'une faible visibilité (icônes blanches sur fond clair)
Ce problème peut être résolu en utilisant l'approche du point n ° 3 ou en remplaçant le fichier de style dans le
values-29
dossier et en utilisant un plus récent api<item name="android:enforceStatusBarContrast">true</item>
. Cela appliquera automatiquement la teinte grisâtre aux icônes, si votre couleur d'arrière-plan est trop claire.la source
Voici le thème que j'utilise pour accomplir cela:
la source
La bonne solution consiste à modifier une propriété en XML sous votre balise Activity en un style ci-dessous. Ça marche juste
la source