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>