Pregunta Obtenga las dimensiones de la pantalla en píxeles


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?


1672
2018-06-19 08:25


origen


Respuestas:


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);

3327
2018-06-19 08:41



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;

350
2018-01-31 02:01



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.


111
2018-04-06 21:23



(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.


103
2017-07-24 03:14



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) {
}

62
2018-03-29 08:15



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

Enter image description here

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.


43
2017-08-27 13:12



La manera más simple:

 int screenHeight = getResources().getDisplayMetrics().heightPixels;
 int screenWidth = getResources().getDisplayMetrics().widthPixels; 

42
2017-11-26 10:47