2012-09-02 10 views
5

En lugar de utilizar esta línea siguiente para cada TextView:¿Puedo usar variables en XML para Android?

android:textSize="40sp" 

¿Soy capaz de reemplazar 40sp con una variable?

Como cuestión lado, he estado recomienda utilizar unidades de SP ya que pasa por los ajustes definidos por el usuario. ¿Es esta una mejor práctica?

Respuesta

5

¿Puedo reemplazar 40sp con una variable?

Puede utilizar a dimension resource (por ejemplo, android:textSize="@dimen/someSize"), o usar un estilo que hace esto (por la respuesta de AlexN), o configurar el tamaño en tiempo de ejecución a través de setTextSize().

Se me recomendó usar unidades SP según la configuración definida por el usuario. ¿Es esta una mejor práctica?

En las versiones más nuevas de Android, el usuario puede cambiar el tamaño de fuente base a través de la aplicación Configuración. Al usar sp para unidades, los tamaños de fuente se escalarán junto con el tamaño de fuente base. Si usa otras unidades (por ejemplo, dp), el tamaño de su fuente seguirá siendo el mismo independientemente de lo que tenga el usuario en la Configuración. Es imposible decir si un uso dado de sp es una "mejor práctica" o no - estoy seguro de que hay casos en los que permitir cambiar el tamaño de la fuente sería algo malo. Sin embargo, por defecto, sp es probablemente el punto de partida correcto.

2

que yo sepa, el uso de SP es una muy buena práctica para el tamaño del texto. Y según su primera pregunta, creo que no podemos usar variable, sin embargo, hay una mejor manera. Compruébelo usted mismo - http://developer.android.com/guide/topics/ui/themes.html

Así que si va a definir un estilo, se puede declarar sus Vistas en XML como <TextView android:id = "@+id/myId" style = "@style/myStyle"/> Y este estilo se incapsulate todos los parámetros que desee establecer a sus textViews en esa pantalla.

+0

Gracias. Ni siquiera sabía sobre estilos. – tomofv

1

No, no es posible utilizar variables en función de código en archivos XML. Sin embargo, puedes usar estilos para esto.

Ejemplo:

<style name="MyTvStyle"> 
    <item name="android:textSize">40sp</item> 
</style> 

luego aplicarlo como esto: enfoque basado

<TextView style="@style/MyTvStyle" ... /> 

Un código también es posible. Si TextViews tiene su atributo android:id definido, puede recuperarlos en el código con el método findViewById.

Ejemplo:

int[] id_array = { 
    R.id.textview1, R.id.textview2, R.id.textview3 //Put all the id's of your textviews here 
} 

for(int i : id_array) { //Loop trough all the id's and retrieve the Textview associated with it. 
    TextView textview = (TextView)findViewById(i); 
    tv.setTextSize(TypedValue.COMPLEX_UNIT_SP,40); //Set the text size to 40sp 
} 

Y sí, siempre es mejor usar sp en lugar de los valores normales de píxeles. Dado que sp se escalará con el tamaño del dispositivo y la configuración del usuario.

Cuestiones relacionadas