Android EditText.setError() дает невидимый текст ошибки

У меня очень простой EditText, как показано ниже:

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

В каком-то валидационном коде я использую Android EditText.setError(), чтобы показать любые ошибки проверки. Это отлично работает в OS 2.x, но не на устройстве OS 3.x(Xoom) - на Xoom вы можете увидеть контур всплывающего окна ошибки, но вы не можете увидеть текст ошибки.

Я предполагаю, что текст есть, но он невидим. Как сделать его видимым? Я не вижу android:textColor, который будет относиться к тексту ошибки.

Кроме того, если текст действительно невидим, то любые идеи, почему 2.x ведет себя по-разному с 3.x, похоже, что это вызовет проблемы обратной совместимости.

Спасибо.

Ответ 1

Похоже, вы можете обойти эту проблему, вызвав EditText.setError() с объектом SpannableStringBuilder, а не с 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);

Ответ 2

Для более элегантного решения попробуйте следующее:

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

Ответ 3

Используйте родную родительскую тему для соответствующего уровня API в вашем собственном настроенном стиле!. "@android: стиль /theme.name"

Различать темы Конфигурация > :

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

Ответ 4

У меня была та же проблема. В моем случае я применил parent = "android: Theme.Light" к значениям -V14/styles.xml. Это сделало элемент управления EditText похожим на элемент управления API android API 2.3.3 и ниже. Но текст сообщения об ошибке был белым и, следовательно, не был виден. После некоторых царапин на голове я понял это.

Измените родительский = "android: Theme.Light" на parent = "android: Theme.Holo.Light.NoActionBar" (что бы ни было тема Holo). Но в определении EditText добавьте android:background="@android:drawable/edit_text"

Мой EditText выглядит следующим образом

<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" />

Ответ 5

Если вы хотите изменить цвет текста в тексте ошибки, вы должны добавить этот код в свои файлы тем.

Для v8:

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

Для v11:

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