Obtenga la dimensión de XML y establezca el tamaño del texto en tiempo de ejecución


101

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.

Respuestas:


297
<dimen name="text_medium">18sp</dimen>

Establezca el tamaño en el código:

textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.text_medium));

7
No sé sobre el OP, pero esta era la respuesta que estaba buscando. Estaba usando COMPLEX_UNIT_DP pensando que necesitaba especificar el tipo de entrada y no el tipo de salida.
HenryAdamsJr

cuando obtengo mi tamaño de fuente (definido en un sp) obtengo 60. Cuando lo configuro con OMPLEX_UNIT_PX y lo recupero nuevamente obtengo 70. Parece que no todo está claro aquí
Gleichmut

2
Para el tamaño del texto, ¿por qué no puedo usarlo TypedValue.COMPLEX_UNIT_SPen su lugar?
dphans

3
@dphans El Resources.getDimension()método devuelve el valor que ya está multiplicado por la métrica apropiada
pkuszewski

2
@pkuszewski Vaya, eso es tan confuso.
Big_Chair

4

Ambos 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/


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.