Me gustaría cargar el valor tal como está. Tengo dos dimension.xml
archivos, uno adentro /res/values/dimension.xml
y el otro adentro /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 intenté hacer
getResources().getString(R.dimen.tutorial_cross_marginTop);
Esto funcionaría en principio, pero obtengo una cadena que termina en "inmersión" ...
android
android-resources
dpi
dimension
Héctor Júdez Sapena
fuente
fuente
getDimensionPixelSize(int id)
que indica exactamente que regresa en Pixel, por lo quegetDimension(int id)
debería regresar en dp (unidades independientes de la dependencia), que estaría listo para usar, por ejemplo, con ViewsetPadding
Respuestas:
En mi dimens.xml tengo
En código si lo hago
esto devolverá 72, que como estado de documentos se multiplica por la densidad del teléfono actual (48dp x 1.5 en mi caso)
exactamente como lo dicen los documentos:
así que si desea un valor de dp exacto, como en xml, divídalo con la densidad de DisplayMetrics
dp será 48 ahora
fuente
dp
dará el valor de píxel escalado relativo a la escala del objeto de recurso utilizado para recuperarlo. Una vez que entres en varias formas de obtener recursos, esto será más relevante. Para simplificar, puede pensar que es relativo a la escala de la pantalla. También haysp
, o píxeles relativos al tamaño del texto del sistema, ypx
, o píxeles directamente. Cada uno es diferente y tiene un propósito diferente.fuente
La
Resource
clase también tiene un método getDimensionPixelSize () que creo que se ajustará a sus necesidades.fuente
getDimensionPixelSize()
si puede consultar los documentos que establece claramente DevolucionesResource dimension value multiplied by the appropriate metric and truncated to integer pixels.
Para aquellos que solo necesitan ahorrar algo de
int
valor en los recursos, pueden hacer lo siguiente.integers.xml
Código
fuente
Puede usar getDimensionPixelOffset () en lugar de getDimension, por lo que no tuvo que enviar a int.
fuente
Puede escribir un número entero en el archivo xml también ... ¿
ha visto [esto] http://developer.android.com/guide/topics/resources/more-resources.html#Integer ? usar como .
fuente
Creo que es bueno obtener el valor según la resolución, pero si no quieres hacerlo, da 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 interfaz de usuario, para expresar 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 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,
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 la 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 hacerlo, da esto en px .......
consulte 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 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 relación de dp a píxel cambiará con la densidad de la pantalla, pero no necesariamente en proporción directa. Usar 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 la interfaz de usuario 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 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.
fuente
Use una extensión de Kotlin
Puede agregar una extensión para simplificar este proceso. Le permite simplemente llamar
context.dp(R.dimen. tutorial_cross_marginTop)
para obtener el valor FloatSi desea manejarlo sin contexto, puede usar
Resources.getSystem()
:Por ejemplo, en un dispositivo xhdpi, use
24.dp
para obtener 12.0 o12.px
para obtener 24fuente