J'ai créé des éléments personnalisés et je souhaite les placer par programme dans le coin supérieur droit ( n
pixels du bord supérieur et m
pixels du bord droit). Par conséquent, je dois obtenir la largeur et la hauteur de l'écran, puis définir la position:
int px = screenWidth - m;
int py = screenHeight - n;
Comment puis-je obtenir screenWidth
et screenHeight
dans l'activité principale?
getMetrics
. Le commentaire de Nik dans sa réponse explique mêmegetDisplayMetrics
de considérer la taille du système / barre d'état. Vous pouvez également utiliser la densité comme jmaculate et LoungeKatt ont expliqué avoir la valeur EXACT :DisplayMetrics dm = getResources().getDisplayMetrics(); float fwidth = dm.density * dm.widthPixels;
testé dans Android v2.2 (API 8) et v4.0 avec de bons résultats et sans erreurs / avertissements .Resources.getSystem().getDisplayMetrics()
. Vous n'en aurez pas besoinContext
pour les obtenir.Réponses:
Si vous voulez les dimensions d'affichage en pixels, vous pouvez utiliser
getSize
:Si vous n'êtes pas dans un,
Activity
vous pouvez obtenir la valeurDisplay
par défaut viaWINDOW_SERVICE
:Si vous êtes dans un fragment et que vous souhaitez y parvenir, utilisez simplement Activity.WindowManager (dans Xamarin.Android) ou getActivity (). GetWindowManager () (en java).
Avant d'
getSize
être introduit (dans l'API niveau 13), vous pouviez utiliser les méthodesgetWidth
etgetHeight
qui sont désormais obsolètes:Cependant, pour le cas d'utilisation que vous décrivez, une marge / remplissage dans la disposition semble plus appropriée.
Une autre façon est: DisplayMetrics
Nous pouvons utiliser
widthPixels
pour obtenir des informations sur:Exemple:
la source
try/catch
pour un tel chèque? Pourquoi ne pas simplement utiliserif (android.os.Build.VERSION.SDK_INT >= 13)
sans aucune exception levée?try/catch
Dans un flux d'application normal, je pense que c'est une mauvaise pratique.Une façon est:
Il est obsolète et vous devriez essayer le code suivant à la place. Les deux premières lignes de code vous donnent les
DisplayMetrics
objecs. Ces objets contient les champs commeheightPixels
,widthPixels
.la source
Cela ne répond peut-être pas à votre question, mais il pourrait être utile de savoir (je le cherchais moi-même quand je suis arrivé à cette question) que si vous avez besoin d'une dimension de vue mais que votre code est en cours d'exécution alors que sa disposition n'a pas encore été présentée (par exemple dans
onCreate()
) vous pouvez configurer unViewTreeObserver.OnGlobalLayoutListener
avecView.getViewTreeObserver().addOnGlobalLayoutListener()
et y mettre le code approprié qui a besoin de la dimension de la vue. Le rappel de l'auditeur sera appelé lorsque la mise en page aura été présentée.la source
View.post()
n'est pas garanti? Je suis curieux car je compte également sur cette méthode pour obtenir la taille d'une vue après la mise en page et je ne savais pas qu'elle n'était pas fiable.View
vous venezViewTreeObserver
? Ou partagent-ils tous le même?(Réponse 2012, peut-être obsolète) Si vous souhaitez prendre en charge la version pré Honeycomb, vous devrez mettre en compatibilité descendante avant l'API 13. Quelque chose comme:
Bien sûr, les méthodes obsolètes seront finalement retirées des SDK les plus récents, mais bien que nous comptions toujours sur la plupart de nos utilisateurs avec Android 2.1, 2.2 et 2.3, c'est ce qui nous reste.
la source
J'ai essayé toutes les "solutions" sans succès et j'ai remarqué que l'application "Dalvik Explorer" d'Elliott Hughes affiche toujours la bonne dimension sur n'importe quel appareil Android / version OS. J'ai fini par regarder son projet open source qui se trouve ici: https://code.google.com/p/enh/
Voici tout le code pertinent:
EDIT: version légèrement améliorée (évitez de déclencher des exceptions sur une version de système d'exploitation non prise en charge):
la source
Manière la plus simple:
la source
Pour accéder à la hauteur de la barre d'état pour les appareils Android, nous préférons une méthode de programmation pour l'obtenir:
Exemple de code
La variable
result
donne la hauteur en pixel.Pour un accès rapide
Pour plus d' informations sur la hauteur de
Title bar
,Navigation bar
etContent View
, jeter un regard bienveillant sur Android appareil Tailles de l' écran .la source
getResources().getDisplayMetrics().heightPixels + result
donne la hauteur réelle en plein écran. La réponse de Dragan Marjanović fonctionne également, mais je préfère cette solution beaucoup plus courte et plus simple.OnApplyWindowInsetsListener
.Obtenez d'abord la vue (par exemple par
findViewById()
), puis vous pouvez utiliser getWidth () sur la vue elle-même.la source
J'ai deux fonctions, l'une pour envoyer le contexte et l'autre pour obtenir la hauteur et la largeur en pixels:
et
la source
@SuppressLint("NewApi")
juste au-dessus de la signature de fonction pour pouvoir compiler.Pour une mise à l'échelle dynamique à l'aide de XML, il existe un attribut appelé "android: layout_weight"
L'exemple ci-dessous, modifié à partir de la réponse de Synic sur ce fil , montre un bouton qui occupe 75% de l'écran (poids = 0,25) et une vue texte occupant les 25% restants de l'écran (poids = 0,75).
la source
Voici le code que j'utilise pour la tâche:
Semble assez propre et pourtant, s'occupe de la dépréciation.
la source
N'est-ce pas une bien meilleure solution? DisplayMetrics est livré avec tout ce dont vous avez besoin et fonctionne à partir de l'API 1.
Vous pouvez également obtenir l'affichage réel (y compris les décors d'écran, tels que la barre d'état ou la barre de navigation du logiciel) à l'aide de getRealMetrics , mais cela ne fonctionne que sur 17+.
Suis-je en train de manquer quelque chose?
la source
Ajout juste à la réponse de Francesco. L'autre observateur qui est plus apte, si vous voulez trouver l'emplacement dans la fenêtre ou l'emplacement dans l'écran est ViewTreeObserver.OnPreDrawListener ()
Cela peut également être utilisé pour trouver d'autres attributs d'une vue qui est principalement inconnue au moment de onCreate (), par exemple la position de défilement, la position à l'échelle.
la source
Utilisation du code suivant dans Activity.
la source
Trouver la largeur et la hauteur de l'écran:
En utilisant cela, nous pouvons obtenir le SDK 13 le plus récent et supérieur.
la source
la source
J'ai trouvé que ça faisait l'affaire.
la source
Besoin de dire que si vous n'êtes pas dans
Activity
, mais dansView
(ou que vous avez une variable deView
type dans votre portée), il n'est pas nécessaire d'utiliserWINDOW_SERVICE
. Ensuite, vous pouvez utiliser au moins deux façons.Première:
Seconde:
Toutes ces méthodes que nous appelons ici ne sont pas obsolètes.
la source
la source
Pour obtenir les dimensions de l'écran, utilisez des métriques d'affichage
Obtenez la hauteur et la largeur en pixels
la source
Ce n'est pas une réponse pour l'OP, car il voulait les dimensions d'affichage en pixels réels. Je voulais les dimensions en "pixels indépendants de l'appareil", et rassembler les réponses d'ici https://stackoverflow.com/a/17880012/253938 et ici https://stackoverflow.com/a/6656774/253938 je suis venu avec ça:
la source
Vous pouvez faire obtenir la hauteur taille à l' aide:
et la largeur en utilisant
la source
Il existe un moyen non obsolète de le faire à l'aide de DisplayMetrics (API 1), qui évite le désordre try / catch:
la source
J'envelopperais le code getSize comme ceci:
la source
Pour ceux qui recherchent une dimension d'écran utilisable sans barre d'état et barre d'action (également grâce à la réponse de Swapnil):
la source
Chargez d'abord le fichier XML puis écrivez ce code:
Affichez la largeur et la hauteur en fonction de la résolution de votre écran.
la source
Suivez les méthodes ci-dessous:
la source
Kotlin
la source
Il y a des moments où vous devez connaître les dimensions précises de l'espace disponible pour une mise en page lorsque vous êtes sur la création d'une activité. Après réflexion, j'ai trouvé cette façon de procéder.
Si, pour une raison quelconque, vous ne voulez pas ajouter une autre activité au manifeste Android, vous pouvez le faire de cette façon:
la source
Si vous ne voulez pas les frais généraux des gestionnaires de fenêtres, des points ou des affichages, vous pouvez saisir les attributs de hauteur et de largeur de l'élément View le plus haut dans votre XML, à condition que sa hauteur et sa largeur soient définies sur match_parent. (Cela est vrai tant que votre mise en page occupe tout l'écran.)
Par exemple, si votre XML commence par quelque chose comme ceci:
Ensuite
findViewById(R.id.entireLayout).getWidth()
, retournera la largeur de l'écran etfindViewById(R.id.entireLayout).getHeight()
retournera la hauteur de l'écran.la source