Establecer el tamaño del texto en .xml o mediante programación

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 el DisplayMetrics actual asociado con los recursos.

Pero ¿qué debo hacer para que esta 2 maneras se ve igual?

setTextSize( float ) espera un valor de píxel escalado. Así, setTextSize( 12 ) le daría el resultado deseado. Sin embargo, getDimension() y getDimensionPixelSize() devuelven el tamaño en unidades de píxeles, por lo que debe utilizar la variante de tipo unidad de setTextSize() 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á muy bien 🙂 También debe recordar que textView tiene un setTextSize (unidad int, float tamaño), que debe utilizarse al establecer el tamaño de código, pero no de xml dimen.

Actualmente tengo lo mismo. Se estableció una dimensión en dimens.xml y lo aplicó mediante programación, que es 3 veces mayor, que cuando los ajustes a través de xml.

También he comprobado:

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

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

El valor predeterminado setTextSize aplica COMPLEX_UNIT_SP de forma predeterminada btw. Así que una vez más, la API de Android es inconsistente, por lo que la configuración de forma programática sólo y adaptar los tamaños, por lo que encajan, será mi solución.

Editar: Ajustar el tamaño del texto mediante programación en la Nota 2 (4.4.2) vs Nota 4 (5.0.1) conduce a un resultado totalmente diferente.-

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.