Obtener las dimensiones de la pantalla en píxeles

He creado algunos elementos personalizados y quiero colocarlos mediante programación en la esquina superior derecha (a n píxeles del borde superior y a m píxeles del 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;

¿Cómo obtengo screenWidth y screenHeight en la actividad principal?

Solución

Si quieres las dimensiones de la pantalla en píxeles puedes 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 una Actividad puedes obtener la Pantalla por defecto a través de WINDOW_SERVICE:

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

Si estás en un fragmento y quieres conseguirlo, utiliza Activity.WindowManager (en Xamarin.Android) o getActivity().getWindowManager() (en java).

Antes de que se introdujera getSize (en el nivel 13 de la API), podías utilizar los métodos getWidth y getHeight que ahora están obsoletos:

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

Sin embargo, para el caso de uso que describes, parece más apropiado un margen/recuadro en el diseño.

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

Podemos utilizar widthPixels para obtener información de:

"El ancho absoluto de la pantalla en píxeles".

Ejemplo:

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

Una forma es:

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

Está obsoleta, y deberías probar el siguiente código en su lugar. Las dos primeras líneas de código te dan los objetos 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;
Comentarios (10)

Primero obtenga la vista (por ejemplo, mediante findViewById()) y luego puede utilizar getWidth() en la propia vista.

Comentarios (2)