2011-12-22 10 views
5

Tengo un Activity que contiene un EditText en 3.1. Basado en la entrada del usuario, cambio el color del texto en EditText (rojo por un error), y luego lo reinicio en negro cuando el texto está bien.Obtener un valor de color 'predeterminado' de EditText del tema

Un problema se relaciona con el cambio del tema general de la actividad. Por ejemplo, al cambiar al tema oscuro habitual del tema claro, el texto negro se muestra sobre un fondo negro, así que tengo que entrar y cambiar el código, en lugar de restablecer el texto a blanco cuando los datos estén correctos.

En lugar de tener que cambiar este código si hago un cambio de tema en la Actividad, me preguntaba si había una forma de extraer el color de texto predeterminado de EditText para un tema determinado programáticamente, entonces simplemente puedo cambiar el texto al color predeterminado en lugar de la codificación en blanco, negro, etc.

Respuesta

8

Use R.attr.

setTextColor(android.R.attr.editTextColor) 
+0

Eso es bueno, pero sólo para Honeycomb y hacia adelante – Panthro

+1

En caso de no resolverse el atributo como en esta respuesta? http://stackoverflow.com/a/23543990/1245231 – petrsyn

7

De acuerdo con Theme's docs obtener el color directamente con obtainStyledAttributes.

TypedArray themeArray = context.getTheme().obtainStyledAttributes(new int[] {android.R.attr.editTextColor}); 
try { 
    int index = 0; 
    int defaultColourValue = 0; 
    int editTextColour = themeArray.getColor(index, defaultColourValue); 
} 
finally 
{ 
    // Calling recycle() is important. Especially if you use alot of TypedArrays 
    // http://stackoverflow.com/a/13805641/8524 
    themeArray.recycle(); 
} 
+1

No olvide llamar 'recycle()' en su TypedArray después de que haya terminado con él. – iamreptar

Cuestiones relacionadas