En dimens.xml, tengo:
<dimen name="text_medium">18sp</dimen>
En tiempo de ejecución, obtengo este valor y configuro el tamaño del texto de una vista de texto:
int size = context.getResources().getDimensionPixelSize(R.dimen.text_medium);
textView.setTextSize(size).
En una tableta de 10 ″ (1280 x 800), todo está bien; pero en un teléfono (800 x 480), la vista de texto tiene una fuente muy grande. En la tableta, el tamaño es igual a 18; en el teléfono, son 27.
Si configuro el tamaño manualmente mediante:
textView.setTextSize(size)
el tamaño es normal en ambos dispositivos.
android
textview
dimensions
Yura Shinkarev
fuente
fuente
TypedValue.COMPLEX_UNIT_SP
en su lugar?Resources.getDimension()
método devuelve el valor que ya está multiplicado por la métrica apropiadaAmbos métodos getDimensionPixelSize () y getDimension () usan la densidad de pantalla para calcular los píxeles. La densidad de la pantalla de su teléfono es obviamente hdpi (240 ppp), por lo que usa una escala de 1.5 para convertir dp a sp. Matemáticas simples 18 * 1.5 = 27.
Parece que la densidad de su tableta es mdpi (160 ppp), por lo que la escala es solo 1: 1.
Pero si compara el tamaño real de ambos textos, debería ser el mismo.
La mejor manera es simplemente crear dos archivos dimens.xml, uno en la carpeta de valores para el teléfono y otro en valores-sw600dp para tabletas (también puede usar la carpeta valores-sw720dp-land para almacenar dimensiones para tabletas de 10 pulgadas en orientación horizontal).
Puede leer más sobre las dimensiones en Android en: http://android4beginners.com/2013/07/appendix-c-everything-about-sizes-and-dimensions-in-android/
fuente
Puede usar sdp (píxeles de densidad escalables) https://github.com/intuit/sdp en lugar de dp, esto definitivamente le salvará la vida
fuente