我知道我们可以使用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更改。我怎么能改变它?
答案 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并覆盖您自己的错误绘制机制。