您的位置:

SpannableString详解

一、什么是SpannableString

SpannableString是Android中一个用于文本内样式和格式化的类,通过它可以让文本实现更加丰富的显示效果。SpannableString中的文本可以同时拥有不同的样式和格式,比如不同的颜色、字体、大小、超链接等等。

在Android开发中,我们可以使用SpannableString或其子类SpannableStringBuilder来创建一个包含多种不同样式的字符串文本,在 TextView、EditText 等中显示出来。

二、SpannableString的常用属性

SpannableString的属性主要有四种:

1. ForegroundColorSpan

可以修改一串文本的颜色

SpannableString spannableString = new SpannableString("设置文本的颜色");
ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.RED);
spannableString.setSpan(colorSpan, 2, 5, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

2. RelativeSizeSpan

可以修改字体大小,相对原始字体大小倍数

SpannableString spannableString = new SpannableString("相对大小");
RelativeSizeSpan sizeSpan01 = new RelativeSizeSpan(1.2f);
RelativeSizeSpan sizeSpan02 = new RelativeSizeSpan(1.4f);
RelativeSizeSpan sizeSpan03 = new RelativeSizeSpan(1.6f);
RGBColorSpan colorSpan01 = new RGBColorSpan(getResources().getColor(R.color.colorAccent));
RGBColorSpan colorSpan02 = new RGBColorSpan(getResources().getColor(R.color.colorPrimary));
spannableString.setSpan(sizeSpan01,0,4,Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableString.setSpan(sizeSpan02,4,6,Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableString.setSpan(colorSpan01,0,3, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableString.setSpan(colorSpan02,4,7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);

3. StyleSpan

可以修改字体样式,比如粗体、斜体等

SpannableString spannableString = new SpannableString("粗体、斜体");
StyleSpan styleSpan_B = new StyleSpan(Typeface.BOLD);
StyleSpan styleSpan_I = new StyleSpan(Typeface.ITALIC);
spannableString.setSpan(styleSpan_B,0,2,Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableString.setSpan(styleSpan_I,3,5,Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);

4. ClickableSpan

可以为文本添加点击事件

SpannableString spannableString = new SpannableString("点击事件");
ClickableSpan clickableSpan = new ClickableSpan() {
    @Override
    public void onClick(View widget) {
        Toast.makeText(MainActivity.this,"点击事件",Toast.LENGTH_SHORT).show();
    }

    @Override
    public void updateDrawState(TextPaint ds) {
        super.updateDrawState(ds);
        ds.setUnderlineText(false);
    }
};
spannableString.setSpan(clickableSpan,0,4, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setText(spannableString);

三、SpannableString的使用场景

1. 富文本效果

在需要添加下划线、加粗、改变颜色等样式的情况下,使用SpannableString可以比较方便的实现这些富文本效果。

2. 消息气泡

在聊天系统中,可以利用SpannableString来实现各种形状的气泡。通过设置背景颜色和圆角矩形等方式来实现不同的气泡效果。

3.卡片结构

在一些app中,可以使用SpannableString来实现文字和图片混排,从而实现类似于卡片的结构,界面更加美观。

四、总结

SpannableString提供了丰富的富文本效果,可以轻松实现各种样式的文本,为我们的应用程序带来更多的设计效果。