如何编写样式到Android的EditText错误文本?

我正在尝试为我的android应用程序编写新的自定义样式。 我需要给在EditText设置setError之后出现的errorText赋予样式。

我如何定制它的风格?

例如:我想在style.xml中设置它的background白色和textColor :Blue等等

在这里输入图像描述

解决scheme在最后,这里是截图:

样式错误


一些解释

可以使用以下行设置文本颜色

 yourEditText.setError(Html.fromHtml("<font color='blue'>this is the error</font>")); 

但是,这可能无法保证。


根据源代码,这个Popup显示的types是ErrorPopup ,它是TextView内部的一个类。 这个Popup的内容是从com.android.internal.R.layout.textview_hint

 final TextView err = (TextView) inflater.inflate(com.android.internal.R.layout.textview_hint, null); 

这个Popup的背景取决于它是否应该放在锚点的上方:

 if (above) { mView.setBackgroundResource(com.android.internal.R.drawable.popup_inline_error_above); } else { mView.setBackgroundResource(com.android.internal.R.drawable.popup_inline_error); } 

由于用于创buildpopup窗口的所有android资源都是内部的并且最终是硬编码的,所以最好的办法是创build自己的错误popup窗口。 这将是非常容易的,你不会真的干涉正常的EditText因为默认的popup窗口只是用来显示错误,因此,创build自己的就没事了。


我在这里创build了它: WidgyWidgets

我不认为你可以自定义它的样式,因为错误popup使用内部样式 :

 mPopupInlineErrorBackgroundId = getResourceId(mPopupInlineErrorBackgroundId, com.android.internal.R.styleable.Theme_errorMessageBackground); mView.setBackgroundResource(mPopupInlineErrorBackgroundId); 

但是,可以使用重载的setError(CharSequence, Drawable)设置Spanned和自定义错误图标。

您可以使用fromHtml()轻松创build一个Spanned的HTML。

但是,您仍然无法设置popup的背景图像:-(

如果编辑文本字段为空,请在表单validation时添加它。

  int ecolor = R.color.black; // whatever color you want String estring = "Please enter a valid email address"; ForegroundColorSpan fgcspan = new ForegroundColorSpan(ecolor); SpannableStringBuilder ssbuilder = new SpannableStringBuilder(estring); ssbuilder.setSpan(fgcspan, 0, estring.length(), 0); edtEmail.requestFocus(); edtEmail.setError(ssbuilder); 

当您在编辑文本中写入时,错误标志自动closures

感谢Sachin

我已经看到了接受的答案,但我不喜欢拟议的图书馆

我认为这是Android框架中的一个错误,我在这里提交了一个bug: https : //code.google.com/p/android/issues/detail?id=158590

编辑:androiddevise库TextInputLayout小部件可以用来获得更好的EditTexterror handling。

看看它在这里的样子: https : //www.youtube.com/watch?v=YnQHb0fNtF8

以及如何在这里实现: http : //code.tutsplus.com/tutorials/creating-a-login-screen-using-textinputlayout–cms-24168

按照这个链接有一个很好的材料devise外观的错误信息! materialdoc 截图