Configuración de estilos globales para vistas en Android

Digamos que quiero que todas las instancias de TextView de mi aplicación tengan textColor="#ffffff" . ¿Hay una manera de establecer que en un lugar en lugar de configurarlo para cada TextView ?

En realidad, puede establecer un estilo predeterminado para TextViews (y la mayoría de los demás widgets integrados) sin necesidad de realizar una clase java personalizada ni de configurar el estilo de forma individual.

Si echa un vistazo a themes.xml en la fuente de Android, verá un montón de atributos para el estilo predeterminado de varios widgets. La clave es el atributo textViewStyle (o editTextStyle , etc.) que anula en su tema personalizado. Puede anularlos de la siguiente manera:

Cree un styles.xml :

 <?xml version="1.0" encoding="utf-8"?> <resources> <style name="MyTheme" parent="android:Theme"> <item name="android:textViewStyle">@style/MyTextViewStyle</item> </style> <style name="MyTextViewStyle" parent="android:Widget.TextView"> <item name="android:textColor">#F00</item> <item name="android:textStyle">bold</item> </style> </resources> 

A continuación, sólo aplique ese tema a su aplicación en AndroidManifest.xml :

 <application […] android:theme="@style/MyTheme">… 

Y todas sus vistas de texto por defecto al estilo definido en MyTextViewStyle (en este caso, negrita y roja)!

Esto se probó en los dispositivos de API nivel 4 en adelante y parece funcionar muy bien.

Hay dos formas de hacerlo:

1. Uso de estilos

Puede definir sus propios estilos creando archivos XML en el directorio res/values . Por lo tanto, supongamos que desea tener texto rojo y en negrita, a continuación, crear un archivo con este contenido:

 <?xml version="1.0" encoding="utf-8"?> <resources> <style name="MyRedTheme" parent="android:Theme.Light"> <item name="android:textAppearance">@style/MyRedTextAppearance</item> </style> <style name="MyRedTextAppearance" parent="@android:style/TextAppearance"> <item name="android:textColor">#F00</item> <item name="android:textStyle">bold</item> </style> </resources> 

Puedes nombrarlo como quieras, por ejemplo res/values/red.xml . Entonces, lo único que tienes que hacer es usar esa vista en los widgets que quieras, por ejemplo:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView style="@style/MyRedTheme" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="This is red, isn't it?" /> </LinearLayout> 

Para obtener más información, puede leer este artículo: Descripción de los temas y estilos de Android

2. Uso de clases personalizadas

Esta es otra forma posible de lograr esto, y sería proporcionar su propio TextView que establezca el color del texto siempre a lo que quiera; por ejemplo:

 import android.content.Context; import android.graphics.Color; import android.util.AttributeSet; import android.widget.TextView; public class RedTextView extends TextView{ public RedTextView(Context context, AttributeSet attrs) { super(context, attrs); setTextColor(Color.RED); } } 

Entonces, sólo tienes que tratarlo como un TextView normal en tu archivo XML:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <org.example.RedTextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="This is red, isn't it?" /> </LinearLayout> 

Si usted usa una u otra opción depende de sus necesidades. Si lo único que quieres hacer es modificar la apariencia, entonces el mejor enfoque es el primero. Por otro lado, si desea cambiar la apariencia y agregar alguna nueva funcionalidad a sus widgets, el segundo es el camino a seguir.

Defina un estilo y utilícelo en cada widget, defina un tema que reemplace el valor predeterminado de Android para ese widget o defina un recurso de cadena y haga referencia a él en cada widget

Para el color de texto predeterminado en TextView , defina android:textColorTertiary en su tema al color deseado:

 <item name="android:textColorTertiary">@color/your_text_color</item> 

Muchos otros colores de control de Android pueden controlarse mediante atributos de estructura o admitir atributos de biblioteca si utiliza la biblioteca de soporte.

Para obtener una lista de atributos que puede establecer, consulte el código fuente de styles.xml y themes.xml , o este tema muy útil de Dan Lew, intente cambiar cada valor y ver qué cambian en la pantalla.

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