Establecer estilos globales para Vistas en Android

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

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

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

Crea un styles.xml :

      

Luego solo aplica ese tema a tu aplicación en AndroidManifest.xml :

  

¡Y todas sus vistas de texto estarán predeterminadas al estilo definido en MyTextViewStyle (en este caso, en negrita y rojo)!

Esto se probó en dispositivos del nivel 4 de API 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 . Entonces, supongamos que quieres tener texto en negrita y rojo, luego creas un archivo con este contenido:

      

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

     

Para obtener más referencias, puede leer este artículo: comprender los temas y estilos de Android

2. Usando 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 desee; 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, solo tiene que tratarlo como un TextView normal en su archivo XML:

     

Si 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 el aspecto y agregar nuevas funcionalidades a sus widgets, el segundo es el camino a seguir.

Defina un estilo y úselo en cada widget, defina un tema que anule el 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 , establece android:textColorTertiary en tu tema al color deseado:

 @color/your_text_color 

Muchos otros colores de control de Android se pueden controlar utilizando atributos de marco o atributos de biblioteca de soporte si usa la biblioteca de soporte.

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