使用场景
一个textview中, 展示不同的字体效果
效果展示
![](https://img-blog.csdnimg.cn/20210312001740410.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NuYWlsdW5jbGUy,size_16,color_FFFFFF,t_70#pic_center)
autoj版本
原理
SpannableString.setSpan
字体效果全部使用该方法生成
安卓官方文档
https://developer.android.google.cn/reference/android/text/SpannableString?hl=en#setSpan(java.lang.Object,%20int,%20int,%20int)
效果列表
- 字符用图片替换
- 修改字符背景
- 修改字符颜色
- 文字添加点击事件
- 文字超链接
- 中划线
- 下划线
- 下标
- 上标
- 下标用图片代替
- 字体相对大小
- 字体绝对大小
- 基于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);
微信公众号 AutoJsPro教程
QQ群
747748653