studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android dpi dimension

para - manual de programacion android pdf



Cargue el valor de dimensión de res/values/dimension.xml desde el código fuente (7)

En mi dimens.xml tengo

<dimen name="test">48dp</dimen>

En codigo si lo hago

int valueInPixels = (int) getResources().getDimension(R.dimen.test)

esto devolverá 72, que según el estado de la documentación se multiplica por la densidad del teléfono actual (48dp x 1.5 en mi caso)

exactamente como lo indica la documentación:

Recuperar una dimensión para un ID de recurso particular. Las conversiones de unidades se basan en los DisplayMetrics actuales asociados con los recursos.

así que si desea un valor dp exacto como en xml, simplemente divídalo con la densidad de DisplayMetrics

int dp = (int) (getResources().getDimension(R.dimen.test) / getResources().getDisplayMetrics().density)

dp tendrá 48 ahora

Me gustaría cargar el valor como es. Tengo dos archivos dimension.xml , uno en /res/values/dimension.xml y el otro en /res/values-sw360dp/dimension.xml .

Desde el código fuente me gustaría hacer algo como

getResources().getDimension(R.dimen.tutorial_cross_marginTop);

Esto funciona pero el valor que obtengo se multiplica por el factor de densidad de la pantalla (1.5 para hdpi, 2.0 para xhdpi, etc.).

También traté de hacer

getResources().getString(R.dimen.tutorial_cross_marginTop);

Esto funcionaría en principio, pero obtengo una cadena que termina en "dip" ...


La clase de Resource también tiene un método getDimensionPixelSize() que creo que se ajustará a sus necesidades.


Para aquellos que solo necesitan guardar algún valor int en los recursos, puede hacer lo siguiente.

integers.xml

<?xml version="1.0" encoding="utf-8"?> <resources> <integer name="default_value">100</integer> </resources>

Código

int defaultValue = getResources().getInteger(R.integer.default_value);


Puede usar getDimensionPixelOffset () en lugar de getDimension, por lo que no tuvo que convertir a int.

int valueInPixels = getResources().getDimensionPixelOffset(R.dimen.test)



This works but the value I get is multiplied times the screen density factor (1.5 for hdpi, 2.0 for xhdpi, etc).

Creo que es bueno obtener el valor según la resolución, pero si no quieres hacer esto, dale esto en px .......

Pixel independiente de densidad (dp)

Una unidad de píxeles virtual que debe utilizar al definir el diseño de la interfaz de usuario, para expresar las dimensiones o la posición del diseño de forma independiente de la densidad. El píxel independiente de la densidad es equivalente a un píxel físico en una pantalla de 160 ppp, que es la densidad de referencia asumida por el sistema para una pantalla de densidad "media". En tiempo de ejecución, el sistema maneja de forma transparente cualquier escala de las unidades dp, según sea necesario, en based on the actual density of the screen in use. The conversion of dp units to screen pixels is simple: px = dp * (dpi / 160). For example, on a 240 dpi screen, 1 dp equals 1.5 physical pixels. based on the actual density of the screen in use. The conversion of dp units to screen pixels is simple: px = dp * (dpi / 160). For example, on a 240 dpi screen, 1 dp equals 1.5 physical pixels. Siempre debe usar unidades dp al definir la interfaz de usuario de su aplicación, para garantizar una visualización adecuada de su interfaz de usuario en pantallas con diferentes densidades.

Creo que es bueno cambiar el valor según la resolución, pero si no quieres hacer esto, dale esto en px .......

refiera este link

según esto

dp

Píxeles independientes de la densidad: una unidad abstracta que se basa en la densidad física de la pantalla. Estas unidades son relativas a una pantalla de 160 ppp (puntos por pulgada), en la que 1dp es aproximadamente igual a 1px. When running on a higher density screen, the number of pixels used to draw 1dp is scaled up by a factor appropriate for the screen''s dpi. Likewise, when on a lower density screen, the number of pixels used for 1dp is scaled down. La proporción de dp a píxel cambiará con la densidad de la pantalla, pero no necesariamente en proporción directa. El uso de unidades dp (en lugar de unidades px) es una solución simple para hacer que las dimensiones de la vista en su diseño cambien de tamaño correctamente para diferentes densidades de pantalla. En otras palabras, proporciona consistencia para los tamaños reales de sus elementos de UI en diferentes dispositivos.

px

Píxeles: corresponde a los píxeles reales en la pantalla. Esta unidad de medida no se recomienda porque la representación real puede variar entre los dispositivos; cada dispositivo puede tener un número diferente de píxeles por pulgada y puede tener más o menos píxeles totales disponibles en la pantalla.


Context.getResources().getDimension(int id);