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, похоже, что это вызовет проблемы обратной совместимости.

Благодарю.

Похоже, вы можете обойти эту проблему, вызвав 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); 

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

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

Используйте родную родительскую тему для соответствующего уровня 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

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

Измените parent = "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" /> 

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

Для v8:

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

Для v11:

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