Cargar valor de dimensión de res / values ​​/ dimension.xml del código fuente

Me gustaría cargar el valor tal como está. 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 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 recibo una cadena que termina en “inmersión” …

En mi dimens.xml tengo

 48dp 

En código si lo hago

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

esto devolverá 72 que a medida que el estado de los documentos se multiplica por la densidad del teléfono actual (48dp x 1.5 en mi caso)

exactamente como el estado del documento:

Recupere una dimensión para una ID de recurso particular. Las conversiones de unidades se basan en las DisplayMetrics actuales asociadas a los recursos.

así que si quieres un valor exacto de dp igual que en xml solo divídelo con la densidad de DisplayMetrics

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

dp tendrá 48 ahora

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

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

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

integers.xml

   100  

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) 

Puedes escribir un entero en el archivo xml también ..
¿Has visto [esto] http://developer.android.com/guide/topics/resources/more-resources.html#Integer ? usar como .

  context.getResources().getInteger(R.integer.height_pop); 
  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 hacerlo, dale esto en px …….

Píxel independiente de la densidad (dp)

Una unidad de píxel virtual que debe usar al definir el diseño de la IU, para express las dimensiones o la posición del diseño de una manera 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 base asumida por el sistema para una pantalla de densidad “media”. En tiempo de ejecución, el sistema maneja de forma transparente cualquier escalado 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 cuando defina la IU de su aplicación para garantizar una visualización adecuada de su IU en pantallas con diferentes densidades.

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

referir este enlace

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 dpi (puntos por pulgada), en la cual 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 relació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 del mundo real de los elementos de tu UI en diferentes dispositivos.

px

Píxeles: corresponde a los píxeles reales en la pantalla. No se recomienda esta unidad de medida porque la representación real puede variar según 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.