android dimensions

android - Establecer el tamaño del texto en.xml o programáticamente



dimensions (3)

Tengo variable en dimens.xml

<resources> <dimen name="btn_text_size">12sp</dimen> </resources>

Y puedo usarlo en el archivo de diseño:

<TextView android:textSize="@dimen/btn_text_size" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/dialog_tags_complete" />

o programáticamente

tagButton.setTextSize(c.getResources().getDimension(R.dimen.tag_text_size));

Pero estos 2 métodos dan resultados diferentes. Sé que getDimension se basa en los DisplayMetrics actuales asociados con los recursos.

Pero, ¿qué debo hacer para que este 2 maneras se vea igual?


Actualmente tengo lo mismo. Estableció una dimensión en dimens.xml y la aplicó de manera programática, que es 3 veces más grande que cuando se configuraron a través de xml.

Revisé también:

TextView.getTextSize() = 92f getResources().getDimension(R.dimen ...) = 92f

TextView.setTextSize (92)! = TextView con tamaño desde XML, otras marcas como TypedValue.COMPLEX_UNIT_PX lo hacen aún más grande.

El setTextSize predeterminado aplica COMPLEX_UNIT_SP por defecto por cierto. Así que, una vez más, la API de Android es inconsistente, por lo que la configuración solo es programática y adapta los tamaños, para que se ajusten, será mi solución.

Edición: establecer el tamaño del texto mediante programación en Galaxy Note 2 (4.4.2) vs Note 4 (5.0.1) conduce a un resultado totalmente diferente -.-


setTextSize( float ) espera un valor de píxel escalado. Entonces, setTextSize( 12 ) le dará el resultado deseado. Sin embargo, getDimension() y getDimensionPixelSize() devuelven el tamaño en unidades de píxeles, por lo que necesita usar la variante de setTextSize() como unidad de la siguiente manera:

setTextSize( TypedValue.COMPLEX_UNIT_PX, getDimensionPixelSize( R.dimen.tag_text_size ) );


tagButton.setTextSize(c.getResources().getDimensionPixelSize(R.dimen.tag_text_size));

esto funcionará bien :) También debe recordar que textView tiene un setTextSize (unidad int, tamaño flotante), que debe usarse al configurar el tamaño desde el código pero no desde xml dimen.