如何在android中编写EditText错误文本的样式?

ibr*_*maz 45 android android-layout

我正在尝试为我的Android应用程序编写新的自定义样式.我需要给风格ERRORTEXT其设置后出现setErrorEditText.

我该如何定制它的风格?

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

在此输入图像描述

She*_*tib 31

解决方案在最后,这是截图:

样式错误


一些解释

可以使用以下行设置textcolor

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

但是,这可能无法保证.


根据源代码,这Popup显示的是ErrorPopup内部类的类型TextView.这Popup是一个TextView膨胀的内容com.android.internal.R.layout.textview_hint

final TextView err = (TextView) inflater.inflate(com.android.internal.R.layout.textview_hint,
      null);
Run Code Online (Sandbox Code Playgroud)

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

由于用于创建弹出窗口的所有android资源都是内部的并且最终是硬编码的,因此最好的方法是创建自己的错误弹出窗口.这将是非常容易的,你不会真的干扰正常,EditText因为默认弹出窗口仅用于显示错误,因此,创建自己的将是好的.


我在这里创建了它:WidgyWidgets

  • @Eir许可证是"你们都可以自由地使用它并且bla bla bla" (27认同)
  • 它帮助我投票..但我怎么能改变问题图像中定义的红色边框线颜色? (2认同)

Dhe*_*.S. 17

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

mPopupInlineErrorBackgroundId = getResourceId(mPopupInlineErrorBackgroundId,
                    com.android.internal.R.styleable.Theme_errorMessageBackground);
mView.setBackgroundResource(mPopupInlineErrorBackgroundId);
Run Code Online (Sandbox Code Playgroud)

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

您可以轻松地Spanned使用HTML 创建fromHtml().

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


Sac*_*ora 10

如果编辑文本字段为空,请在表单验证时添加.

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

当您编辑编辑文本时,错误标志自动关闭

谢谢萨钦