2011-09-01 12 views
19

Tengo un EditarTexto muy simple, de la siguiente manera:Android EditText.setError() produce texto de error invisible

<EditText 
    android:id="@+id/myedit" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:singleLine="true" 
    android:maxLength="32"/> 

En algún código de validación, que utilizan Android de EditText.setError() para mostrar algún error de validación. Esto funciona bien en OS 2.x pero no en un dispositivo OS 3.x (Xoom): en el Xoom puede ver el contorno del mensaje emergente de error pero no puede ver el texto de error.

Supongo que el texto está allí, pero es invisible. ¿Cómo lo hago visible? No veo un android:textColor que se relacione con el texto de error.

Además, si el texto es realmente invisible, entonces cualquier idea de por qué 2.x se comporta de manera diferente a 3.x parece que esto causaría problemas de compatibilidad con versiones anteriores.

Gracias.

+0

Parece que el texto está ahí, pero es de color gris claro sobre un fondo blanco porque la actividad usa Theme.Light. – jarmod

Respuesta

48

Parece que puede evitar este problema llamando a EditText.setError() con un objeto SpannableStringBuilder en lugar de un String.

int ecolor = xxxx; // whatever color you want 
String estring = "Input is incorrect"; 
ForegroundColorSpan fgcspan = new ForegroundColorSpan(ecolor); 
SpannableStringBuilder ssbuilder = new SpannableStringBuilder(estring); 
ssbuilder.setSpan(fgcspan, 0, estring.length(), 0); 
myedittext.setError(ssbuilder); 
+0

inteligente Respuesta .. – Manivannan

+0

No funciona para mí ... – Noman

+0

Trabajando para mí ahora .... :) – Noman

6

Uso nativa parent theme para el nivel de API apropiado en su propio estilo personalizado! "@android: style/theme.name".

Distinguir temas por Configuration qualifier:

value/style.xml - > parent="@android:style/Theme.Light" 
value-v11/style.xml -> parent="@android:style/Theme.Holo.Light" 
value-v14/style.xml -> parent="@android:style/Theme.DeviceDefault.Light" 

http://code.google.com/p/android/issues/detail?id=22920

+3

Gracias, utilicé la solución proporcionada por el enlace: Sylphe

+0

Esta solución funciona para mí ya que la solución aceptada siempre usa color negro (fijo) –

4

que tenían el mismo problema. En mi caso, he aplicado parent = "android: Theme.Light" a values-V14/styles.xml. Esto hizo que el control EditText se viera como un control de Android API 2.3.3 y siguientes. Pero el texto del mensaje de error era completamente blanco y, por lo tanto, no era visible. Después de algunos rasguños en la cabeza me di cuenta de esto.

Cambia el elemento principal = "android: Theme.Light" a parent = "android: Theme.Holo.Light.NoActionBar" (el tema de Holo). Pero en la definición EditarTexto añadir android:background="@android:drawable/edit_text"

Mi EditarTexto se parece a esto

<EditText 
       android:id="@+id/password" 
       style="@style/editTextNormal" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_below="@+id/email" 
       android:hint="@string/prompt_password" 
       android:imeActionId="@+id/login" 
       android:imeActionLabel="@string/action_sign_in_short" 
       android:imeOptions="actionUnspecified" 
       android:inputType="textPassword" 
       android:maxLines="1" 
       android:singleLine="true" 
       android:background="@android:drawable/edit_text" /> 
4

Si desea cambiar el color del texto de la vista de texto de error, a continuación, se debe añadir este código en sus archivos de tema.

Para v8:

<item name="android:textColorSecondaryInverse">@android:color/secondary_text_light</item> 

Para v11:

<item name="android:textColorPrimaryInverse">@android:color/primary_text_light</item> 
+0

Esto funcionó para mí. – Alfergon

19

Para una solución más elegante intente éste:

editText.setError(Html.fromHtml("<font color='red'>Error Message!</font>")); 
+1

Me encanta esta respuesta. – addoil

+1

bueno uno ... gracias #mostar –

+1

pero intento que esto no funcione, edtAddr.setError (Html.fromHtml (" Mensaje de error!")); – influx

Cuestiones relacionadas