¿Cómo obtener el tamaño de pantalla del dispositivo?
El deseo tiene 480 x 800 píxeles, 3,7 pulgadas y la HD tienen 480 x 800 píxeles, 4.3 pulgadas de especificación de la pantalla.
Ejecutar el código que se acepta como respuesta de este hilo ¿Cómo obtener el tamaño de pantalla del dispositivo? Pero está mal !, por ejemplo para el tamaño de la pantalla de 3.7 pulgadas devuelve 2.4 que es muy mal!
- WebView no está llenando toda la pantalla del dispositivo o el emulador
- ¿Es posible configurar el fondo de pantalla tal como se hace con la aplicación que viene con Android?
- La mayoría de los tamaños de pantalla populares / resoluciones en los teléfonos Android
- Tamaño de imagen de mapa de bits de Android
- android webview setdefaultfontsize (tamaño int), ¿cuál es la unidad de tamaño?
¿Alguien sabe cómo obtener el tamaño real de la pantalla ?, No necesito la resolución que necesito el tamaño de la pantalla de la pantalla en pulgadas.
NOTA: este código es incorrecto (al menos no funciona para mí)
DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); int width = dm.widthPixels; //give me 320 int height = dm.heightPixels; //give me 533
Tengo HTC Desire y mi resolución es de 480 x 800 píxeles!
¡Sé que soy estúpido! , Y, obviamente, hago algo mal, pero alguien puede por favor me alto cómo obtener el tamaño real de la pantalla en pulgadas, y obtener la resolución real del dispositivo?
Gracias
- Android: Tamaño de texto de Canvas.drawText () en diferentes resoluciones de pantalla
- Obtener el tamaño mostrado de una imagen dentro de un ImageView
- View getWidth () y getHeight () devuelven 0
- Layout botones para que cada uno divide el espacio por igual
- Archivos de 0 bytes no detectados al descargar archivos en Android
- Cómo obtener el tamaño de un cuadro de diálogo personalizado en android?
- Tamaño de fuente pequeño en el emulador de Android
- ¿Por qué Facebook SDK para Android es tan grande?
OK finalmente encontré cuál es mi problema
Sí, este código funciona bien, pero no devuelve píxeles, devuelve DIP (densidad de píxeles independientes), que no es lo mismo!
DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); int width = dm.widthPixels; //320 dip int height = dm.heightPixels; //533 dip
Lo que necesitaba eran los píxeles REALES y el cálculo para ellos es así:
int widthPix = (int) Math.ceil(dm.widthPixels * (dm.densityDpi / 160.0));
Ahora el widthPix es 480!
Encontré tu pregunta y me hizo preguntarme por qué definitivamente no estoy viendo este efecto en cualquier dispositivo que estoy desarrollando o probando con … getWidth () / getHeight () están devolviendo las extensiones exactas de la pantalla utilizable. Sospecho que otros terminarán aquí también, añadiendo el código que causa más confusión y no entender la causa raíz.
Resulta que esto es exactamente lo que sucede si deshabilita explícitamente el pre-escalado Consulte el segundo viñeta de este documento . (Una rápida búsqueda de Google en el término "320×533" apareció muchas otras personas que han encontrado esto.) Deshágase de su pre-escala y la discrepancia debe desaparecer (getWidth () / getHeight () Tamaño, no el tamaño escalado .
Nota para devs de tableta: getWidth () / getHeight () no devolverá el tamaño de pantalla sin formato porque la barra inferior (48 píxeles o menos) no forma parte del área a la que una aplicación puede dibujar. Obtendrá el tamaño de todo lo que pueda dibujar (por ejemplo, 1280×752 en lugar de 1280×800 en modo horizontal). Una vez más, ningún pre-escala significa que estos valores son exactos y exactos.
Puedes hacerlo así:
DisplayMetrics m = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(m); // fills m int x = m.xdpi; int y = m.ydpi;
Y esto le dará el tipo de densidad de la pantalla:
int density= m.densityDpi;
Intente usar la clase Display
lugar de DisplayMetrics
.
Display dispOb = getWindowManager().getDefaultDisplay(); String widthAndHeight= dispOb.getWidth()+"X"+dispOb.getHeight();
Deshabilite la escala previa agregando esta línea a su archivo de manifiesto:
<supports-screens android:anyDensity="true" />
Posición:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="...." android:versionCode="1" android:versionName="1.0"> <supports-screens android:anyDensity="true" /> <application android:label="@string/app_name" > ...