1922 votes

Comment obtenir les dimensions de l'écran

J'ai créé quelques éléments personnalisés, et j'ai envie de programmation pour placer le coin supérieur droit (n pixels du bord supérieur et m pixels du bord droit). Donc j'ai besoin d'obtenir la largeur de l'écran et la hauteur de l'écran, puis réglez la position:

int px = screenWidth - m;
int py = screenHeight - n;

Comment puis-je obtenir screenWidth et screenHeight l'Activité principale?

3542voto

Josef Pfleger Points 37003

Si vous souhaitez que l'affichage dimensions en pixels, vous pouvez utiliser getSize:

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 un Activity vous pouvez obtenir la valeur par défaut Display par WINDOW_SERVICE:

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

Avant d' getSize a été mis en place (en API de niveau 13), vous pouvez utiliser l' getWidth et getHeight méthodes qui sont maintenant obsolètes:

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

Pour le cas d'utilisation que vous décrivez toutefois, une marge/rembourrage dans la mise en page semble plus approprié.

387voto

Balaji.K Points 4614

Une façon est:

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

Il est obsolète, et vous devriez essayer le code suivant à la place. Les deux premières lignes de code vous donne la DisplayMetrics objecs. Cet objet contient les champs comme heightPixels,widthPixels.

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

metrics.heightPixels;
metrics.widthPixels;

123voto

Il ne peut pas répondre à votre question, mais il pourrait être utile de savoir (je cherchais moi-même quand je suis venu à cette question) que si vous avez besoin d'un point de Vue de la dimension, mais votre code est exécuté lors de sa mise en page n'a pas été établies (par exemple, en onCreate() ), vous pouvez configurer un ViewTreeObserver.OnGlobalLayoutListener avec View.getViewTreeObserver().addOnGlobalLayoutListener() et de mettre le code qui a besoin de l'avis de la dimension. L'auditeur du callback sera appelé lors de la mise en page ont été aménagés.

111voto

digiphd Points 1316

Si vous voulez soutenir d'avant en Nid d'abeille (hautement probable), vous aurez besoin de mettre en compatibilité descendante avant API 13. Quelque chose comme:

int Measuredwidth = 0;
int Measuredheight = 0;
Point size = new Point();
WindowManager w = getWindowManager();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2)
{
    w.getDefaultDisplay().getSize(size);

    Measuredwidth = size.x;
    Measuredheight = size.y;
}
else
{
    Display d = w.getDefaultDisplay();
    Measuredwidth = d.getWidth();
    Measuredheight = d.getHeight();
}

Bien sûr, les méthodes obsolètes seront éventuellement prises dans la plus récente des Kits de développement logiciel, mais si nous continuons de compter sur la plupart de nos utilisateurs d'avoir Android 2.1, 2.2 et 2.3, c'est ce que nous nous retrouvons avec.

75voto

J'ai essayé tous les possible de "solutions" sans succès et j'ai remarqué que Elliott Hughes' "Dalvik" Explorateur de l'app affiche toujours une bonne cote sur n'importe quel appareil Android/version de l'OS. J'ai fini de regarder son projet open source qui peut être trouvé ici: https://code.google.com/p/enh/

Voici tout le code correspondant:

WindowManager w = activity.getWindowManager();
Display d = w.getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
d.getMetrics(metrics);
// since SDK_INT = 1;
widthPixels = metrics.widthPixels;
heightPixels = metrics.heightPixels;
try {
    // used when 17 > SDK_INT >= 14; includes window decorations (statusbar bar/menu bar)
    widthPixels = (Integer) Display.class.getMethod("getRawWidth").invoke(d);
    heightPixels = (Integer) Display.class.getMethod("getRawHeight").invoke(d);
} catch (Exception ignored) {
}
try {
    // used when SDK_INT >= 17; includes window decorations (statusbar bar/menu bar)
    Point realSize = new Point();
    Display.class.getMethod("getRealSize", Point.class).invoke(d, realSize);
    widthPixels = realSize.x;
    heightPixels = realSize.y;
} catch (Exception ignored) {
}

EDIT: légèrement version améliorée (éviter de tir exceptions à la non-prise en charge version du système d'exploitation):

WindowManager w = activity.getWindowManager();
Display d = w.getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
d.getMetrics(metrics);
// since SDK_INT = 1;
widthPixels = metrics.widthPixels;
heightPixels = metrics.heightPixels;
// includes window decorations (statusbar bar/menu bar)
if (Build.VERSION.SDK_INT >= 14 && Build.VERSION.SDK_INT < 17)
try {
    widthPixels = (Integer) Display.class.getMethod("getRawWidth").invoke(d);
    heightPixels = (Integer) Display.class.getMethod("getRawHeight").invoke(d);
} catch (Exception ignored) {
}
// includes window decorations (statusbar bar/menu bar)
if (Build.VERSION.SDK_INT >= 17)
try {
    Point realSize = new Point();
    Display.class.getMethod("getRealSize", Point.class).invoke(d, realSize);
    widthPixels = realSize.x;
    heightPixels = realSize.y;
} catch (Exception ignored) {
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X