SpannableString的使用,实现富文本效果

本文详细介绍如何使用SpannableString在Android的TextView中实现复杂的文字样式,包括字体颜色、下划线、中划线、字体大小、背景色、斜体、粗体、可点击区域及文本图片等,提供代码实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Android开发过程中,总会有些需求涉及到TextView展示形式复杂多样的文字,例如下划线、斜体、超链接等。其实SpannableString就能够简便的设置文字样式。

核心方法 

object what:ForegroundColorSpan、UnderlineSpan等各种Span;
int start:字符开始位置
int end:字符结束位置
int flags:取值有如下四个
Spanned.SPAN_INCLUSIVE_EXCLUSIVE 从起始下标到终了下标,包括起始下标
Spanned.SPAN_INCLUSIVE_INCLUSIVE 从起始下标到终了下标,同时包括起始下标和终了下标
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE 从起始下标到终了下标,但都不包括起始下标和终了下标
Spanned.SPAN_EXCLUSIVE_INCLUSIVE 从起始下标到终了下标,包括终了下标

先去试试看

  • 字体颜色 ForegroundColorSpan 

    SpannableString spannableString = new SpannableString("安卓开发从入门到放弃");
    ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.BLUE);
    spannableString.setSpan(colorSpan,0,4,Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
    textView.setText(spannableString);

      

  • 下划线 UnderlineSpan

SpannableString spannableString = new SpannableString("安卓开发从入门到放弃");
UnderlineSpan underlineSpan = new UnderlineSpan();
spannableString.setSpan(underlineSpan,0,4,Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);

 

  • 中划线 StrikethroughSpan

SpannableString spannableString = new SpannableString("安卓开发从入门到放弃");
StrikethroughSpan strikethroughSpan = new StrikethroughSpan();   
spannableString.setSpan(strikethroughSpan,0,4,Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);

 

  •  字体大小 AbsoluteSizeSpan

SpannableString spannableString = new SpannableString("安卓开发从入门到放弃");
AbsoluteSizeSpan absoluteSizeSpan = new AbsoluteSizeSpan(25);     
spannableString.setSpan(absoluteSizeSpan,0,4,Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);

 

  • 字体背景色 BackgroundColorSpan

SpannableString spannableString = new SpannableString("安卓开发从入门到放弃");
BackgroundColorSpan absoluteSizeSpan = new BackgroundColorSpan(Color.BLUE);   
spannableString.setSpan(absoluteSizeSpan,0,4,Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);

 

  • 斜体、粗体 StyleSpan

SpannableString spannableString = new SpannableString("安卓开发从入门到放弃");
StyleSpan styleSpan1  = new StyleSpan(Typeface.BOLD);
StyleSpan styleSpan2  = new StyleSpan(Typeface.ITALIC);
spannableString.setSpan(styleSpan1,5,7,Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableString.setSpan(styleSpan2,8,10,Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);

  

  • 可点击 ClickableSpan

SpannableString spannableString = new SpannableString("安卓开发从入门到放弃");
//必须添加,否则点击时间无效
textView.setMovementMethod(LinkMovementMethod.getInstance());
MyClickSpan clickSpan = new MyClickSpan();
spannableString.setSpan(clickSpan,0,4,Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);


class MyClickSpan extends ClickableSpan {

      @Override
      public void updateDrawState(TextPaint ds) {
            ds.bgColor = getResources().getColor(R.color.white);
        }

        @Override
        public void onClick(@NonNull View widget) {
            ToastUtils.showToast("被点击了");
        }
    }

 

  • 文本图片 ImageSpan

SpannableString spannableString = new SpannableString("安卓开发从入门到放弃");
Drawable drawable = getResources().getDrawable(R.drawable.coin);
drawable.setBounds(0, 0, 42, 42);
ImageSpan imageSpan = new ImageSpan(drawable);
spannableString.setSpan(imageSpan,3,5,Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);

 

其实还有其他的各种风格的span,模式大同小异,有兴趣可以实现一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值