Android SpannableStringBuilder 实现testview关键字点亮操作

文章目录

  • SpannableStringBuilder 参数
  • 简单使用(只匹配第一次出现的)
  • 封装方法(增加多个关键字点亮)

一、SpannableStringBuilder 参数

对应参数:

ForegroundColorSpan: 文本颜色

BackgroundColorSpan : 文本背景色

AbsoluteSizeSpan: 文本字体(绝对大小)

StyleSpan : 字体样式:粗体、斜体等

StrikethroughSpan : 删除线

ImageSpan : 图片

MaskFilterSpan: 修饰效果,如模糊(BlurMaskFilter)浮雕

UnderlineSpan: 下划线

RasterizerSpan: 光栅效果

SuggestionSpan: 相当于占位符

DynamicDrawableSpan : 设置图片,基于文本基线或底部对齐

RelativeSizeSpan: 相对大小(文本字体)

ScaleXSpan: 基于x轴缩放

TextAppearanceSpan : 文本外貌(包括字体、大小、样式和颜色)

SubscriptSpan : 下标(数学公式会用到)

SuperscriptSpan: 上标(数学公式会用到)

TypefaceSpan : 文本字体

URLSpan: 文本超链接

Spannable.SPAN_EXCLUSIVE_INCLUSIVE:在 Span前面输入的字符不应用 Span的效果,在后面输入的字符应用Span效果

Spannable.SPAN_INCLUSIVE_EXCLUSIVE:在 Span前面输入的字符应用 Span 的效果,在后面输入的字符不应用Span效果

Spannable.SPAN_INCUJSIVE_INCLUSIVE:在 Span前后输入的字符都应用 Span 的效果

Spannable.SPAN_EXCLUSIVE_EXCLUSIVE:前后都不包括

二、简单使用

代码如下(示例):

private SpannableStringBuilder fillColor(String wholeStr, String highlightStr, int color) {
    int start;
    int end;
    if (!TextUtils.isEmpty(wholeStr) && !TextUtils.isEmpty(highlightStr)) {
        if (wholeStr.contains(highlightStr)) {
            start = wholeStr.indexOf(highlightStr);
            end = start + highlightStr.length();
        } else {
            return null;
        }
    } else {
        return null;
    }
    SpannableStringBuilder spBuilder = new SpannableStringBuilder(wholeStr);
    CharacterStyle charaStyle = new ForegroundColorSpan(color);
    spBuilder.setSpan(charaStyle, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    return spBuilder;
}

调用方法:

String s = "  我是第一行aaaa\naaaaa我是第二行\n我是第三行设定VS和VS是色红红火火恍aaaaaaaaaaa恍惚惚或或或或或或或或或或解决好家伙哈哈哈哈\n我是第四行";
SpannableStringBuilder stringBuilder = fillColor(s, "aaaaaaaaaaa", Color.RED);
logPrintTv.setText(stringBuilder == null ? s : stringBuilder);

二.封装方法

代码如下(示例):

 效果展示:

 记录学习,欢迎讨论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值