Quelle est la hauteur de la barre d'état dans Android? Est-ce toujours la même chose?
D'après mes mesures, il semble que ce soit 25dp, mais je ne sais pas s'il a la même hauteur sur toutes les plateformes.
(Je veux savoir ceci pour implémenter correctement une transition de fondu d'une activité qui n'a pas de barre d'état à une qui en a)
Réponses:
cette question a été répondue avant ... Hauteur de la barre d'état?
Mise à jour ::
Méthode actuelle:
ok, la hauteur de la barre d'état dépend de la taille de l'écran, par exemple dans un appareil avec une taille d'écran de 240 X 320 la hauteur de la barre d'état est de 20 pixels, pour un appareil avec une taille d'écran de 320 X 480 la hauteur de la barre d'état est de 25 pixels, pour un appareil avec 480 x 800 la hauteur de la barre d'état doit être de 38 px
donc je recommande d'utiliser ce script pour obtenir la hauteur de la barre d'état
(ancienne méthode) pour obtenir la hauteur de la barre d'état sur la
onCreate()
méthode de votre activité, utilisez cette méthode:la source
window.getDecorView().getWindowVisibleDisplayFrame(rectangle)
n'est pas un moyen correct d'obtenir la hauteur de la barre d'état si vous êtes en mode multi-fenêtres + rotation portrait + deuxième fenêtre. Vous obtiendrez une valeur énorme (incluez la 1ère hauteur).De tous les exemples de code que j'ai utilisés pour obtenir la hauteur de la barre d'état, le seul qui semble réellement fonctionner dans la
onCreate
méthode d'unActivity
est le suivant:Apparemment, la hauteur réelle de la barre d'état est conservée en tant que ressource Android. Le code ci-dessus peut être ajouté à une
ContextWrapper
classe (par exemple unActivity
).Trouvé sur http://mrtn.me/blog/2012/03/17/get-the-height-of-the-status-bar-in-android/
la source
Sur les périphériques MDPI, la barre d'état est de 25 pixels. Nous pouvons l'utiliser comme base et le multiplier par la densité (arrondie vers le haut) pour obtenir la hauteur de la barre d'état sur n'importe quel appareil:
Pour référence: ldpi = 0,75, mdpi = 1, hdpi = 1,5, xhdpi = 2
la source
Coder en dur la taille ou utiliser la réflexion pour obtenir la valeur de
status_bar_height
est considéré comme une mauvaise pratique. Chris Banes en a parlé au Droidcon New York . La méthode recommandée pour obtenir la taille de la barre d'état est via le OnApplyWindowInsetsListener :Cela a été ajouté dans l'API 20 et est également rétroporté via ViewAppCompat .
la source
J'ai fusionné quelques solutions ensemble:
une autre alternative:
EDIT: Alternative à runJustBeforeBeingDrawn: https://stackoverflow.com/a/28136027/878126
la source
Selon les directives de conception de Google ; la hauteur de la barre d'état est de 24 dp.
Si vous souhaitez obtenir la hauteur de la barre d'état en pixels, vous pouvez utiliser la méthode ci-dessous:
qui peut être appelé de l'activité avec:
la source
La hauteur par défaut était de 25dp. Avec Android Marshmallow (API 23), la hauteur a été réduite à 24dp.
Mise à jour: veuillez noter que depuis l'âge des encoches et des caméras perforées, l'utilisation d'une hauteur statique pour la barre d'état ne fonctionne plus. Veuillez utiliser des encarts de fenêtre à la place!
la source
cela fonctionne également avec le lien de réfraction
la source
J'ai le même problème d'avoir à obtenir la hauteur de la barre d'état dans un onCreate. Cela fonctionne pour moi.
À l'intérieur du onCreate:
Voir:
http://developer.android.com/reference/android/util/DisplayMetrics.html http://developer.android.com/guide/practices/ui_guidelines/icon_design.html
la source
La hauteur officielle est
24dp
, comme indiqué officiellement par Google sur la page Web Android Design .la source
Oui, lorsque je l'essaye avec View, il fournit le résultat de 25 pixels. Voici tout le code:
la source
la source
Essaye ça:
cela n'a pas fonctionné pour moi dans la méthode onCreate pour l'activité, mais l'a fait quand je l'ai mis dans un onClickListener et m'a donné une mesure de 25
la source
la hauteur de la barre d'état est de 24dp dans android 6.0
vous pouvez trouver la réponse dans le code source: frameworks \ base \ core \ res \ res \ values \ dimens.xml
la source
@android:dimen/status_bar_height
ne fonctionne pas pour moiPour résoudre ce problème, j'ai utilisé une approche combinée. Cela est nécessaire car sur les tablettes, la barre système soustrait déjà ses pixels lorsque display.getHeight () est appelé. Je vérifie donc d'abord si une barre système est présente, puis l'approche de Ben Claytons, qui fonctionne bien sur les téléphones.
la source
Grâce à @Niklas +1, c'est la bonne façon de procéder.
Veuillez m'excuser si le code n'est pas correct à 100%, converti à partir de Xamarin C # mais c'est juste. Fonctionne avec des encoches, etc.
la source
Solution plein écran basculée:
Cette solution peut ressembler à une solution de contournement, mais elle explique en fait si votre application est en plein écran (aka masquer la barre d'état) ou non:
De cette façon, si votre application est actuellement en plein écran, elle
barheight
sera égale à 0.Personnellement, j'ai dû utiliser cela pour corriger les coordonnées absolues de TouchEvent pour tenir compte de la barre d'état comme suit:
Et cela obtiendra la coordonnée absolue absolue, que l'application soit en plein écran ou non.
Prendre plaisir
la source
Sur Android 4.1 et supérieur, vous pouvez définir le contenu de votre application pour qu'il apparaisse derrière la barre d'état, afin que le contenu ne se redimensionne pas lorsque la barre d'état se cache et s'affiche. Pour ce faire, utilisez SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN. Vous devrez peut-être également utiliser SYSTEM_UI_FLAG_LAYOUT_STABLE pour aider votre application à conserver une mise en page stable.
Lorsque vous utilisez cette approche, il devient de votre responsabilité de vous assurer que les parties critiques de l'interface utilisateur de votre application (par exemple, les contrôles intégrés dans une application Maps) ne finissent pas par être couvertes par des barres système. Cela pourrait rendre votre application inutilisable. Dans la plupart des cas, vous pouvez gérer cela en ajoutant l'attribut android: fitsSystemWindows à votre fichier de disposition XML, défini sur true. Cela ajuste le remplissage du ViewGroup parent pour laisser de l'espace aux fenêtres système. C'est suffisant pour la plupart des applications.
Dans certains cas, cependant, vous devrez peut-être modifier le remplissage par défaut pour obtenir la mise en page souhaitée pour votre application. Pour manipuler directement la présentation de votre contenu par rapport aux barres système (qui occupent un espace connu sous le nom de "insertions de contenu" de la fenêtre), remplacez fitSystemWindows (insertions rect). La méthode fitSystemWindows () est appelée par la hiérarchie des vues lorsque les encarts de contenu d'une fenêtre ont changé, pour permettre à la fenêtre d'ajuster son contenu en conséquence. En remplaçant cette méthode, vous pouvez gérer les encarts (et donc la disposition de votre application) comme vous le souhaitez.
formulaire: https://developer.android.com/training/system-ui/status.html#behind
la source
Si vous connaissez exactement la taille VS hauteur
comme
par exemple, dans un appareil avec une taille d'écran de 320 X 480, la hauteur de la barre d'état est de 25 pixels, pour un appareil avec 480 x 800, la hauteur de la barre d'état doit être de 38 pixels.
alors vous pouvez simplement obtenir la largeur de votre vue / la taille de l'écran, vous pouvez simplement utiliser une instruction if else pour obtenir la hauteur de la barre d'état
la source
La raison pour laquelle la première réponse ne fonctionne pas pour certaines personnes est que vous ne pouvez pas obtenir les dimensions d'une vue tant qu'elle n'est pas prête à être rendue. Utilisez un
OnGlobalLayoutListener
pour obtenir ces dimensions lorsque vous pouvez réellement:Il s'agit de la méthode la plus fiable.
la source
Étant donné que le mode multi-fenêtres est maintenant disponible, votre application peut ne pas avoir de barre d'état en haut.
La solution suivante gère automatiquement tous les cas pour vous.
ou par programme
vous pouvez également obtenir une vue racine par
Pour plus de détails sur l'obtention de la vue racine, consultez - https://stackoverflow.com/a/4488149/9640177
la source
Ce problème est récemment devenu pertinent pour moi en raison de l'encoche de mon Pixel 3XL. J'ai vraiment aimé la solution du développeur Android , mais je voulais pouvoir obtenir la hauteur de la barre d'état à volonté, car elle était spécifiquement nécessaire pour une animation plein écran que je devais jouer. La fonction ci-dessous a permis une requête fiable:
Et puis dans la classe d'activité:
Vous voudrez bien sûr faire passer une référence faible de l'activité au paramètre de méthode de la classe Helper statique, mais par souci de concision, je me suis abstenu dans cet exemple. Les
blurBitmap
eterrorHudFrameLayout
sont omis pour la même raison, car ils ne concernent pas directement l'obtention de la hauteur de la barre d'état.la source
Version Kotlin qui combine deux meilleures solutions
status_bar_height
valeur si elle est présentestatus_bar_height
n'est pas présent, calcule la hauteur de la barre d'état à partir du décor de fenêtrela source