Creé algunos elementos personalizados y quiero colocarlos en la esquina superior derecha de forma programática (n
píxeles desde el borde superior y m
píxeles desde el borde derecho). Por lo tanto, necesito obtener el ancho de la pantalla y la altura de la pantalla y luego establecer la posición:
int px = screenWidth - m;
int py = screenHeight - n;
Como lo consigo screenWidth
y screenHeight
en la actividad principal?
Si desea las dimensiones de la pantalla en píxeles, puede usar getSize
:
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;
Si no estás en un Activity
puedes obtener el valor predeterminado Display
vía WINDOW_SERVICE
:
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
antes de getSize
se introdujo (en el nivel de API 13), podría usar el getWidth
y getHeight
métodos que ahora están en desuso:
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth(); // deprecated
int height = display.getHeight(); // deprecated
Para el caso de uso que está describiendo, sin embargo, un margen / relleno en el diseño parece más apropiado.
Otra forma es: DisplayMetrics
Una estructura que describe información general sobre una pantalla, como su tamaño, densidad y escala de la fuente. Para acceder a los miembros de DisplayMetrics, inicialice un objeto como este:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
Nosotros podemos usar widthPixels
para obtener información para:
"El ancho absoluto de la pantalla en píxeles".
Ejemplo:
Log.d("ApplicationTagName", "Display width in px is " + metrics.widthPixels);
Una forma es:
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();
Está en desuso, y debes probar el siguiente código en su lugar. Las primeras dos líneas de código le brindan los objecs DisplayMetrics. Este objeto contiene los campos como heightPixels, widthPixels.
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int height = metrics.heightPixels;
int width = metrics.widthPixels;
Puede que no responda a su pregunta, pero podría ser útil saber (lo estaba buscando por mí mismo cuando llegué a esta pregunta) que si necesita una dimensión de Vista pero su código se está ejecutando cuando su diseño aún no se ha trazado (por ejemplo, en onCreate()
) puedes configurar un ViewTreeObserver.OnGlobalLayoutListener
con View.getViewTreeObserver().addOnGlobalLayoutListener()
y coloque allí el código relevante que necesita la dimensión de la vista. Se llamará la devolución de llamada del oyente cuando se haya distribuido el diseño.
(Respuesta de 2012, puede estar desactualizado) Si desea admitir pre Honeycomb, deberá poner compatibilidad con versiones anteriores a API 13. Algo así como:
int measuredWidth = 0;
int measuredHeight = 0;
WindowManager w = getWindowManager();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
Point size = new Point();
w.getDefaultDisplay().getSize(size);
measuredWidth = size.x;
measuredHeight = size.y;
} else {
Display d = w.getDefaultDisplay();
measuredWidth = d.getWidth();
measuredHeight = d.getHeight();
}
Por supuesto, los métodos obsoletos eventualmente se eliminarán de los SDK más recientes, pero si bien seguimos dependiendo de que la mayoría de nuestros usuarios tengan Android 2.1, 2.2 y 2.3, esto es lo que nos queda.
Intenté todas las "soluciones" posibles sin éxito y me di cuenta de que la aplicación "Dalvik Explorer" de Elliott Hughes siempre muestra la dimensión correcta en cualquier versión de dispositivo / sistema operativo Android. Terminé mirando su proyecto de código abierto que se puede encontrar aquí: https://code.google.com/p/enh/
Aquí está todo el código relevante:
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) {
}
EDITAR: versión ligeramente mejorada (evite disparar excepciones en la versión de SO no compatible):
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) {
}
Para acceder a la altura de la barra de estado para dispositivos Android, preferimos una forma programática de obtenerlo:
Código de muestra
int resId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resId > 0) {
result = getResources().getDimensionPixelSize(resId);
}
La variable result
da la altura en el pixel.
Para un acceso rápido

Para obtener más información sobre la altura de Title bar
, Navigation bar
y Content View
, mira amablemente en Tamaños de pantalla del dispositivo Android.
La manera más simple:
int screenHeight = getResources().getDisplayMetrics().heightPixels;
int screenWidth = getResources().getDisplayMetrics().widthPixels;