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.density
le 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