Android富文本总结

一、应用场景介绍

在Android应用开发中,有很多UI会画出一些特别炫酷的界面出来,其中一行文字里会有特殊的字会有其他颜色并加粗,着重说明,这样的我们可以用笨办法用几个TextView来链接,但设备适配是一个问题,因为有可能有颜色的那几个文字恰好在换行处怎么办。甚至可能一段文字里面会穿插一些图标,这又怎么办,那么今天我们的主角富文本编辑就很好解决了这一问题。

二、富文本SpannableString能做的事

为文本特定地方添加各种样式和事件,样式包括颜色,大小,背景,删除线,上下标,粗斜体,图片。事件包括点击事件,超链接等。核心代码为

val sb = SpannableString(content) //content表示文本内容
sb.setSpan(
	ForegroundColorSpan(specailColor), //span类型
 	startIndex, //span的起始index
 	endIndx, //span的结束index(一般为startIndex + replaceTxt.length)
 	Spannable.SPAN_EXCLUSIVE_EXCLUSIVE //span类型,设置startIndex和endIndex的开闭区间
)
textview.text = sb

特殊的:setSpan方法的最后一个参数flag取值有以下四种:
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE:前后都不包括,即在指定范围的前面和后面插入新字符都不会应用新样式 (start,end)
Spannable.SPAN_EXCLUSIVE_INCLUSIVE:前面不包括,后面包括。即仅在范围字符的后面插入新字符时会应用新样式(start,end]
Spannable.SPAN_INCLUSIVE_EXCLUSIVE:前面包括,后面不包括。[start,end)
Spannable.SPAN_INCLUSIVE_INCLUSIVE:前后都包括。 [start,end]

三、简单的span应用示例

3.1、 文本颜色

val content = "这是一段文字,需要特殊颜色的内容"
val replaceTxt = "特殊颜色"
val sb = SpannableString(content) //content表示文本内容
val startIndex = content.indexOf(replaceTxt)
val endIndex = startIndex + replaceTxt.length
val specailColor = Color.parseColor("#0644a3")
sb.setSpan(
   ForegroundColorSpan(specailColor), //span类型 specailColor颜色
	startIndex, //span的起始index
	endIndx, //span的结束index(一般为startIndex + replaceTxt.length)
	Spannable.SPAN_EXCLUSIVE_EXCLUSIVE //span类型,设置startIndex和endIndex的开闭区间
)
textview.text = sb

3.2、 特殊文字点击

val content = "这是一段文字,需要点击效果的内容"
val replaceTxt = "点击效果"
val sb = SpannableString(content) //content表示文本内容
val startIndex = content.indexOf(replaceTxt)
val endIndex = startIndex + replaceTxt.length
val sb = SpannableString(content) //content表示文本内容
val clickSpan: ClickableSpan = object : ClickableSpan() {
           override fun onClick(widget: View) {
          			Toast.makeText(context, "点击$replaceTxt", Toast.LENGTH_SHORT).show()
           }
           
           override fun updateDrawState(ds: TextPaint) {
               ds.run { //这里可以动态设置点击区域字符的字体样式,比如颜色、字体、大小、下划线、删除线等
                   typeface = FontManager.getNumberFont()
                   color = ContextCompat.getColor(context, R.color.c_fe0000)
               }
           }
       }
sb.setSpan(
   clickSpan, //span类型
	startIndex, //span的起始index
	endIndx, //span的结束index(一般为startIndex + replaceTxt.length)
	Spannable.SPAN_EXCLUSIVE_EXCLUSIVE //span类型,设置startIndex和endIndex的开闭区间
)
textview.movementMethod = LinkMovementMethod.getInstance()  //点击需要设置,不然没有点击事件
// textview点击时会有一个高亮色,如果不需要可以设置highlightColor为透明色
textview.text = sb

3.3、文本字体大小

val sb = SpannableString(content) //content表示文本内容
sb.setSpan(
   AbsoluteSizeSpan(26,true), //第二个参数表示单位是否是dp
	startIndex, //span的起始index
	endIndx, //span的结束index(一般为startIndex + replaceTxt.length)
	Spannable.SPAN_EXCLUSIVE_EXCLUSIVE //span类型,设置startIndex和endIndex的开闭区间
)
textview.text = sb

3.4、文本中插入图标

val sb = SpannableString(content) //content表示文本内容
val d = getResources().getDrawable(R.mipmap.ic_launcher)
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight())
val span = ImageSpan(d, ImageSpan.ALIGN_BASELINE) //图标基于文本基线对齐 对齐方式默认底部对齐
sb.setSpan(
   span, //span类型
	startIndex, //span的起始index
	endIndx, //span的结束index(一般为startIndex + replaceTxt.length)
	Spannable.SPAN_EXCLUSIVE_EXCLUSIVE //span类型,设置startIndex和endIndex的开闭区间
)
textview.text = sb

四、SpannableStringBuilder与SpannableString

SpannableString只能设置一个span,如果一条内容中不同位置上有多个特殊效果,就无法得到实现。当然,同一个位置上多个特殊效果,我们可以重写Span的updateDrawState(ds: TextPaint) 方法。
SpannableStringBuilder则可以设置多个span,每个span可以设置在不同位置,也可以设置在同一位置上。
使用方式如下

val spb = SpannableStringBuilder(content)
spb.setSpan(span1, start, end, flag)
spb.setSpan(span2, start, end, flag)
textview.text = spb

特别的:SpannableStringBuilder中的内容可以通过append(text: String)添加, 添加新内容后需要注意内容的下标变化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 富文本编辑是指在Android平台上的文本编辑中,可以实现富文本样式的编辑和展示。富文本通常包括文字样式(如字体、大小、颜色)、文本格式(如加粗、斜体、下划线)和图片等不同类型的内容。 Android提供了一些工具和库来实现富文本编辑,最常用的就是使用SpannableString类。SpannableString类是Android提供的一个可变的字符序列,它可以应用于文字的样式和格式。我们可以通过使用SpannableString的相关方法来给特定的文字设置样式,比如设置字体颜色、设置下划线等。 此外,Android还提供了一些内置的Span类,如ForegroundColorSpan用于设置文字颜色、BackgroundColorSpan用于设置文字背景颜色、StyleSpan用于设置文字样式等等。我们可以通过将这些Span类与SpannableString一起使用,来实现富文本编辑的效果。 值得一提的是,除了文字样式之外,富文本编辑还可以包括图片和链接的插入。Android提供了ImageSpan类和ClickableSpan类用于实现这些功能。通过使用ImageSpan,我们可以将图片插入到富文本中,而使用ClickableSpan,我们可以将文字设置为可点击的链接,实现跳转功能。 总的来说,Android提供了丰富的工具和类用于富文本编辑,开发者可以根据自己的需求选择合适的方案来实现富文本编辑功能。无论是文字的样式、格式,还是图片和链接的插入,Android都提供了相应的类和方法来满足开发者的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值