2011-09-01 9 views
19

ho una molto semplice EditText, come segue:Android EditText.setError() produce testo dell'errore invisibile

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

In un certo codice di convalida, io uso Android di EditText.setError() per mostrare eventuali errori di convalida. Questo funziona bene in OS 2.x, ma non su un dispositivo OS 3.x (Xoom) - sul Xoom è possibile vedere la sagoma del popup errore, ma non è possibile vedere il testo di errore.

Sto indovinando che il testo è lì, ma è invisibile. Come posso renderlo visibile? Non vedo uno android:textColor correlato al testo dell'errore.

Inoltre, se il testo è davvero invisibile, quindi tutte le idee perché 2.x comporta in modo diverso da 3.x - sembra che questo potrebbe causare problemi di compatibilità all'indietro.

Grazie.

+0

Sembra che il testo è lì, ma è grigio chiaro su uno sfondo bianco perché l'attività utilizza Theme.Light. – jarmod

risposta

48

Sembra che si può ovviare a questo problema chiamando EditText.setError() con un oggetto SpannableStringBuilder piuttosto che una stringa.

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

Risposta intelligente .. – Manivannan

+0

Non funziona per me ... – Noman

+0

Lavoro per me ora .... :) – Noman

6

Usa nativo parent theme un'adeguata livello di API nel tuo stile proprio personalizzato! "@android: style/theme.name".

Distinguere temi da 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

Grazie, ho usato la soluzione fornita dal link: Sylphe

+0

Questa soluzione funziona per me poiché la soluzione accettata utilizza sempre il colore nero (fisso) –

4

Ho avuto lo stesso problema. Nel mio caso, avevo applicato il genitore = "android: Theme.Light" per i valori-V14/styles.xml. Ciò ha reso il controllo EditText simile a un controllo da Android 2.3.3 e versioni successive. Ma il testo del messaggio di errore era tutto bianco e quindi non era visibile. Dopo alcuni grattacapi, ho capito.

Modificare il parent = "android: Theme.Light" in parent = "android: Theme.Holo.Light.NoActionBar" (quale mai tema Holo). Ma nella definizione EditText aggiungere android:background="@android:drawable/edit_text"

mio EditText assomiglia a questo

<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

Se si desidera modificare il colore del testo della vista testo di errore, allora si dovrebbe aggiungere questo codice nel vostro file del tema.

Per v8:

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

Per v11:

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

Questo ha funzionato per me. – Alfergon

19

Per una soluzione più elegante provare questo:

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

Amo questa risposta. – addoil

+1

buono .... grazie #mostar –

+1

ma provo a non funzionare, edtAddr.setError (Html.fromHtml (" Messaggio di errore!")); – influx

Problemi correlati