android SpannableStringBuilder设置自定义字体
16lz
2021-12-04
出现了什么问题?
private final SpannableStringBuilder mSpannableStringBuilder = new SpannableStringBuilder();Typeface mCustomFont = Typeface.createFromAsset(getActivity().getAssets(), "fonts/DIN Alternate Bold.ttf");mSpannableStringBuilder.setSpan(mCustomFont , 0, mSpannableStringBuilder.toString().indexOf(Constants.N), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);textView.setText(mSpannableStringBuilder);
- 设置字体无效,还是原生的字体
解决办法
- 自定义一个字体的类
public class CustomTypefaceSpan extends TypefaceSpan { private final Typeface newType; public CustomTypefaceSpan(String family, Typeface type) { super(family); newType = type; } @Override public void updateDrawState(TextPaint ds) { applyCustomTypeFace(ds, newType); } @Override public void updateMeasureState(TextPaint paint) { applyCustomTypeFace(paint, newType); } private static void applyCustomTypeFace(Paint paint, Typeface tf) { int oldStyle; Typeface old = paint.getTypeface(); if (old == null) { oldStyle = 0; } else { oldStyle = old.getStyle(); } int fake = oldStyle & ~tf.getStyle(); if ((fake & Typeface.BOLD) != 0) { paint.setFakeBoldText(true); } if ((fake & Typeface.ITALIC) != 0) { paint.setTextSkewX(-0.25f); } paint.setTypeface(tf); }}
- 然后设置字体的方法变化一下
private final SpannableStringBuilder mSpannableStringBuilder = new SpannableStringBuilder();Typeface mCustomFont = Typeface.createFromAsset(getActivity().getAssets(), "fonts/DIN Alternate Bold.ttf");// mCustomFont-->>new CustomTypefaceSpan(textView.getText().toString()mSpannableStringBuilder.setSpan(new CustomTypefaceSpan(textView.getText().toString(),mCustomFont), 0, mSpannableStringBuilder.toString().indexOf(Constants.N), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);textView.setText(mSpannableStringBuilder);
更多相关文章
- Android(安卓)多选列表
- Android开机自动启动程序设置
- Android(安卓)OpenGL与3D应用开发之3D图形绘制
- android 代码设置间距
- Android(安卓)-- 隐藏式抽屉(SlidingDrawer)
- API 25 (Android(安卓)7.1.1 API) widget.Spinner
- android网变化广播接收
- android 备忘录之简单实现
- 支持设置文本的TextFloatingActionButton