如何编写样式到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