2011-09-01 9 views
19

Mam bardzo prosty EditText, co następuje:Android EditText.setError() daje tekst niewidoczny błędzie

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

W niektórych kod weryfikacyjny, używam Android EditText.setError() pokazać ewentualne błędy. Działa to dobrze w systemie OS 2.x, ale nie na urządzeniu z systemem 3.x (Xoom) - na Xoom widać obrys okna błędu, ale nie widać tekstu błędu.

Zgaduję, że tekst tam jest, ale jest niewidoczny. Jak mogę to pokazać? Nie widzę wartości android:textColor, która byłaby związana z tekstem błędu.

Ponadto, jeśli tekst jest rzeczywiście niewidoczny, wszelkie pomysły, dlaczego 2.x zachowuje się inaczej niż w wersji 3.x - wydaje się, że spowodowałoby to problemy ze zgodnością z poprzednimi wersjami.

Dzięki.

+0

Wygląda na to, że tekst jest tam, ale to jasnoszary na białym tle, ponieważ działanie korzysta z Theme.Light. – jarmod

Odpowiedz

48

Wygląda na to, że można obejść ten problem, wywołując metodę EditText.setError() przy pomocy obiektu SpannableStringBuilder zamiast łańcucha.

+0

sprytna Odpowiedź .. – Manivannan

+0

To nie działa dla mnie ... – Noman

+0

Pracujesz dla mnie teraz ... :) – Noman

6

Użyj natywnego parent theme dla odpowiedniego poziomu interfejsu API w swoim własnym, dostosowanym stylu! "@android: style/theme.name".

rozróżnić tematów przez 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

Dzięki, użyłem rozwiązania podanego przez link: Sylphe

+0

To rozwiązanie działa dla mnie, ponieważ przyjęte rozwiązanie zawsze korzysta z czarnego (stałego) koloru. –

4

miałem ten sam problem. W moim przypadku zastosowałem parent = "android: Theme.Light" do wartości -V14/styles.xml. To sprawiło, że formant EditText wyglądał jak formant z Android API 2.3.3 i poniżej. Ale tekst komunikatu o błędzie był cały biały i dlatego nie był widoczny. Po kilku drapaniach głowy zrozumiałem to.

Zmień parent = "android: Theme.Light" na parent = "android: Theme.Holo.Light.NoActionBar" (jakkolwiek motyw Holo). Ale w definicji EditText dodać android:background="@android:drawable/edit_text"

My EditText wygląda to

<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

Jeśli chcesz zmienić kolor tekstu w widoku tekstu błąd, to należy dodać ten kod w plikach tematycznych.

Dla v8:

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

Dla v11:

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

To zadziałało dla mnie. – Alfergon

19

Dla bardziej eleganckie rozwiązanie spróbować tego:

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

Uwielbiam tę odpowiedź. – addoil

+1

dobry .... dziękuję #mostar –

+1

ale próbuję to nie działa, edtAddr.setError (Html.fromHtml (" influx

Powiązane problemy