一、什么是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提供了丰富的富文本效果,可以轻松实现各种样式的文本,为我们的应用程序带来更多的设计效果。