Obtenir les dimensions de l'écran en pixels

J'ai créé quelques éléments personnalisés, et je veux les placer par programmation dans le coin supérieur droit (n pixels du bord supérieur et m pixels du bord droit). Je dois donc 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 la largeur et la hauteur de l'écran dans l'activité principale ?

Solution

Si vous souhaitez obtenir les dimensions d'affichage en pixels, vous pouvez utiliser [getSize][1] :

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;

Si vous n'êtes pas dans une Activité, vous pouvez obtenir l'affichage par défaut via WINDOW_SERVICE :

WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();

Si vous êtes dans un fragment et que vous voulez accomplir ceci, utilisez simplement Activity.WindowManager (dans Xamarin.Android) ou getActivity().getWindowManager() (en java).

Avant l'introduction de getSize (au niveau 13 de l'API), vous pouviez utiliser les méthodes getWidth et getHeight qui sont maintenant dépréciées :

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();  // deprecated
int height = display.getHeight();  // deprecated

Cependant, pour le cas d'utilisation que vous décrivez, une marge ou un renfort dans la mise en page semble plus approprié.

Une autre solution est la suivante : [DisplayMetrics][2]

Une structure décrivant des informations générales sur un écran, telles que sa taille, sa densité et la mise à l'échelle des polices. Pour accéder aux membres de DisplayMetrics, initialisez un objet comme ceci :

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

Nous pouvons utiliser widthPixels pour obtenir des informations sur :

"La largeur absolue de l'affichage en pixels".

Exemple:

Log.d("ApplicationTagName", "Display width in px is " + metrics.widthPixels);

[1] : http://developer.android.com/reference/android/view/Display.html#getSize%28android.graphics.Point%29 [2] : http://developer.android.com/reference/android/util/DisplayMetrics.html

Commentaires (25)

Une façon de le faire :

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();
int height = display.getHeight();

Elle est dépréciée, et vous devriez essayer le code suivant à la place. Les deux premières lignes de code vous donnent l'objet DisplayMetrics. Cet objet contient les champs comme heightPixels, widthPixels.

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

int height = metrics.heightPixels;
int width = metrics.widthPixels;
Commentaires (10)

Obtenez d'abord la vue (par exemple par findViewById()) et ensuite vous pouvez utiliser [getWidth()][1] sur la vue elle-même.

[1] : http://developer.android.com/reference/android/view/View.html#getWidth%28%29

Commentaires (2)