Necesito codificar el diseño de los widgets de Android usando dip / dp (en archivos java). En tiempo de ejecución si codifico,
int pixel=this.getWindowManager().getDefaultDisplay().getWidth() ,;
Esto devuelve el ancho de la pantalla en píxeles (px). Para convertir esto a dp, codifiqué:
int dp =pixel/(int)getResources().getDisplayMetrics().density ;
Esto no parece devolver la respuesta correcta. Creé el emulador de WVGA800 cuya resolución de pantalla es de 480 por 800. Cuando ejecuté el emulador y dejé que el código imprimiera los valores de píxel y dp, llegó a 320 en ambos. Este emulador es de 240 ppp, cuyo factor de escala sería de 0,75.
android
density-independent-pixel
Khushboo
fuente
fuente

Me topé con esta pregunta de Google, y más tarde encontré una solución fácil válida para API> = 13.
Para futuras referencias:
Ver referencia de clase de configuración
Editar: como señaló Nick Baicoianu, esto devuelve el ancho / alto utilizable de la pantalla (que deberían ser los interesantes en la mayoría de los usos). Si necesita las dimensiones de visualización reales , manténgase en la respuesta superior.
fuente
Falta el valor de densidad predeterminado de 160.
En otras palabras, si diseña su diseño con un ancho igual a 160dip en modo vertical, será la mitad de la pantalla en todos los dispositivos ldpi / mdpi / hdpi (excepto las tabletas, creo)
fuente
DisplayMetrics outMetrics = null; getWindowManager().getDefaultDisplay().getMetrics(outMetrics);dentro de la Actividad. Luego,outMetrics.densityle dará el factor de escala del dispositivo actual, como se indica en los documentos¿Qué tal usar esto en su lugar?
fuente
fuente
Respuesta en kotlin:
fuente
Simplificado para Kotlin:
fuente
Obtenga el ancho y la altura de la pantalla en términos de DP con una buena decoración:
Paso 1: crear interfaz
Paso 2: crear una clase de implementador
Paso 3: Obtenga ancho y alto en la actividad:
fuente
Si solo quiere saber sobre el ancho de su pantalla, puede buscar el "ancho de pantalla más pequeño" en sus opciones de desarrollador. Incluso puedes editarlo.
fuente
Prueba esto:
fuente
Su problema es lanzar el flotador a un int, perdiendo precisión. También debe multiplicar con el factor y no dividir.
Hacer esto:
fuente