使用场景
一个textview中, 展示不同的字体效果
效果展示
autoj版本
原理
SpannableString.setSpan
字体效果全部使用该方法生成
安卓官方文档
效果列表
- 字符用图片替换
- 修改字符背景
- 修改字符颜色
- 文字添加点击事件
- 文字超链接
- 中划线
- 下划线
- 下标
- 上标
- 下标用图片代替
- 字体相对大小
- 字体绝对大小
- 基于X轴缩放
- 字体样式,粗体 BOLD、斜体 ITALIC等
- 文本外貌 TextAppearanceSpan family值:monospace serif sans-serif
- 文本对齐方式
- 模糊BlurMaskFilter INNER
- 模糊BlurMaskFilter NORMAL
- 模糊BlurMaskFilter OUTER
- 模糊BlurMaskFilter SOLID
代码讲解
- 布局
ui.layout( <vertical margin="20"> <text id="content" textSize="30sp"></text> </vertical> );
- 文字内容
let spanStr = new SpannableString("...");
- 修改字体(该步骤不是必须的, 可以忽略)
tf = Typeface.createFromFile(java.io.File(files.path("./站酷高端黑.ttf"))); ui.content.setTypeface(tf);
- 处理后设置textview文字内容
handleSpanStr(ui.content, spanStr); ui.content.setTextSize(random(20, 30)); ui.content.setText(spanStr);
处理SpannableString
- 插入图片
bitmap = BitmapFactory.decodeResource(context.getResources(), icon); spanStr.setSpan(new IconMarginSpan(bitmap, 10), 0, 1, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
- 设置背景颜色
spanStr.setSpan(new BackgroundColorSpan(Color.YELLOW), 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- 设置字体颜色
spanStr.setSpan(new ForegroundColorSpan(Color.RED), 3, 8, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- 设置点击事件
spanStr.setSpan( new ClickableSpan({ onClick: function (widget) { Toast.makeText(context, "你点击了我", Toast.LENGTH_SHORT).show(); }, }), 8, 12, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE ); view.setMovementMethod(LinkMovementMethod.getInstance());
- 中划线
spanStr.setSpan(new StrikethroughSpan(), 27, 29, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- 下划线
spanStr.setSpan(new UnderlineSpan(), 29, 32, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- 绝对大小
spanStr.setSpan(new AbsoluteSizeSpan(40), 33, 36, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- 相对大小
spanStr.setSpan(new RelativeSizeSpan(2), 40, 43, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- 基于X轴缩放
spanStr.setSpan(new ScaleXSpan(2), 43, 45, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);