在android中更改文本编辑错误通知字体

时间:2014-05-01 21:30:06

标签: android android-edittext typeface

我知道我们可以使用Typeface更改编辑文字字体。但是我们为编辑文本设置的错误呢? 看下面的代码:

Typeface font = Typeface.createFromAsset(getAssets(), "fonts/ATaha.ttf");
private EditText mPasswordView;
mPasswordView = (EditText) findViewById(R.id.password);
mPasswordView.setTypeface(font);

使用此代码我只能更改编辑文本字体,但是当我设置错误时:

mPasswordView.setError(getString(R.string.error_field_required));

错误通知字体是android默认字体,并且未使用类型face更改。我怎么能改变它?

3 个答案:

答案 0 :(得分:6)

您可以使用SpannableString设置字体:

SpannableString s = new SpannableString(errorString);
s.setSpan(new TypefaceSpan(font), 0, s.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
mPasswordView.setError(s);

具有特定Span集的自定义Typeface类:

public class TypefaceSpan extends MetricAffectingSpan {
    private Typeface mTypeface;
    public TypefaceSpan(Typeface typeface) {
        mTypeface = typeface;
    }

    @Override
    public void updateMeasureState(TextPaint p) {
        p.setTypeface(mTypeface);
        p.setFlags(p.getFlags() | Paint.SUBPIXEL_TEXT_FLAG);
    }

    @Override
    public void updateDrawState(TextPaint tp) {
        tp.setTypeface(mTypeface);
        tp.setFlags(tp.getFlags() | Paint.SUBPIXEL_TEXT_FLAG);
    }
}

答案 1 :(得分:2)

由于您无法直接为错误文本设置Typeface,因此可以通过将HTML字符串设置为其中的文本来实现。

您可以在The CommonsBlog

中看到TextView支持的HTML标记

我们对font有face属性,这意味着您可以更改font-family。

mPasswordView.setError(Html.fromHtml("<font face='MONOSPACE'>Error font is MONOSPACE</font>"));

答案 2 :(得分:0)

通过在错误消息中设置spannable字符串或扩展EditText并覆盖您自己的错误绘制机制。