Android EditText.setError()产生不可见的错误文本

jar*_*mod 20 android android-edittext

我有一个非常简单的EditText,如下所示:

<EditText
     android:id="@+id/myedit"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:singleLine="true"
     android:maxLength="32"/>
Run Code Online (Sandbox Code Playgroud)

在某些验证代码中,我使用Android EditText.setError()来显示任何验证错误.这在OS 2.x中工作正常,但在OS 3.x设备(Xoom)上没有 - 在Xoom上,您可以看到错误弹出的大纲,但是您看不到错误文本.

我猜测文本在那里,但它是看不见的.如何让它可见?我没有看到android:textColor与错误文本有关的内容.

此外,如果文本确实是不可见的,那么为什么2.x与3.x的行为不同的任何想法 - 似乎这会导致向后兼容性问题.

谢谢.

jar*_*mod 49

看起来您可以通过使用SpannableStringBuilder对象而不是String调用EditText.setError()来解决此问题.

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);
Run Code Online (Sandbox Code Playgroud)

  • 一个黑客,但如果你选择一个白色或黑色覆盖良好的颜色它是有效的. (2认同)

mos*_*tar 18

要获得更优雅的解决方案,请试试这个:

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


Arv*_*vis 6

使用本机父主题以适合您自定义样式的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"
Run Code Online (Sandbox Code Playgroud)

http://code.google.com/p/android/issues/detail?id=22920

  • 谢谢,我使用链接给出的解决方案:<style name ="MyApp.Theme.Light.NoTitleBar"parent ="@ android:style/Theme.Light.NoTitleBar"> <item name ="android:textColorPrimaryInverse"> @ android:color/primary_text_light </ item> </ style> (3认同)