美文网首页
Android Span的使用

Android Span的使用

作者: Gray_s | 来源:发表于2021-03-09 23:35 被阅读0次

Android中TextView作为最常用的组件, 常常有很多特殊的需求,例如:嵌入图标、部分文字可点击,点击链接等,这些需求都可以通过Span来实现。

功能
BackgroundColorSpan 更改文本的背景颜色
ClickableSpan 可以点击的字段
ForegroundColorSpan 修改文字颜色
MaskFilterSpan 可以通过MaskFilter修改文字透明度、浮雕等
MetricAffectingSpan 修改文字的宽高等
StrikethroughSpan 文字划线
StrikethroughSpan 双击文字显示建议
UnderlineSpan 文字下划线
AbsoluteSizeSpan 修改文字大小
DynamicDrawableSpan 替换选择的字段为Drawable
ImageSpan 替换选择的字段为Drawable(DynamicDrawableSpan子类)
LocaleSpan 修改文字的地区Locale
RelativeSizeSpan 按比例缩放文字
ReplacementSpan
ScaleXSpan 水平缩放文字大小
StyleSpan 设置文字的Style
SubscriptSpan 向下移动文字基线
SuperscriptSpan 向上移动文字的基线
TextAppearanceSpan 设置文字外观
TextLinks.TextLinkSpan 可点击的文字链接
TypefaceSpan 修改文字字体
URLSpan 设置可点击url链接

上面就是系统提供的所有可用的Span类。下面就来解决上面提出的两个问题。
1.文字中添加图片
这种方式的实现主要是利用ImageSpan

        val spannableString = SpannableString("img这是一张图片")
        getDrawable(this, R.mipmap.ic_launcher)?.let {
            it.setBounds(0, 0, 100, 100)
            val dynamicDrawableSpan =
                ImageSpan(it, ImageSpan.ALIGN_BOTTOM)
            spannableString.setSpan(dynamicDrawableSpan, 0, 3 Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
            val subscriptSpan = SubscriptSpan()
            spannableString.setSpan(subscriptSpan, 0, 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
            tv.setText(spannableString)
        }

代码中不是使用了ImageSpan,同时使用了SubscriptSpan,主要是为了,调整图片的位置,实现类似居中的效果,在实际开发中可以通过,SubscriptSpan、SuperscriptSpan,来调整图片的位置。
2、文字可点击

        val spannableString = SpannableString("你好,再见")
        val dynamicDrawableSpan =
            object : ClickableSpan() {
                override fun onClick(widget: View) {
                    Toast.makeText(widget.context, "点击你好", Toast.LENGTH_SHORT).show()
                }
            }

        spannableString.setSpan(dynamicDrawableSpan, 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
        tv.text = spannableString
        tv.movementMethod = LinkMovementMethod.getInstance()

文字点击的方案就是实现ClickableSpan的onClick方法,然后设置movmentMethod就可以了,不过他会有可以点击的文字会有独特的颜色和下划线。想要修改的话只要继承ClickableSpan,然后重写updateDrawState方法就好了。

abstract class TextColorSpan(var color: Int) : ClickableSpan() {
    override fun updateDrawState(ds: TextPaint) {
        ds.color = color
    }
}

总的来说,span的使用并不复杂,只要使用系统提供的Span就可以解决大部分问题。

相关文章

  • 探索 Android 中的 Span

    探索 Android 中的 Span 在 Android 中,使用 Span 定义文本的样式. 通过 Span 改...

  • Android Span的使用

    Android中TextView作为最常用的组件, 常常有很多特殊的需求,例如:嵌入图标、部分文字可点击,点击链接...

  • Android Span详解

    引子 Android中的Span之前用的很少,接触多了以后,发现Span还是相当有趣的。 Span的命名即使不是最...

  • Android Span详解

    引子 Android中的Span之前用的很少,接触多了以后,发现Span还是相当有趣的。Span的命名即使不是最差...

  • 自定义Span

    1 简介 之前已经讲过TextView的基础知识、段落级别的Span和字符级别的Span,分析了Android提供...

  • 计算字体的高度和宽度

    注意:你使用的是span,那就用span来计算。你使用的div,就用div来计算,下面是代码: 1000asdas...

  • 无标题文章

    6123 使用命令: gh ghkj asd sdf sddf 7. 其他 T...

  • Android7.0系统以上editable.getSpans(

    Android系统用各种span的时候,有一个.getSpans()方法,在Android6.0 以下这个方法返回...

  • Android Span在项目中的几种使用方式

    1.改变文字颜色 2.改变文字大小 3.改变文字颜色 并 添加点击事件 4.增加边框和改变颜色及字体大小 1.改变...

  • Android使用Span打造丰富多彩的文本

    1.引言 在开发过程中经常需要使用文本,有时候需要对一段文字中的部分文字进行特殊的处理,如改变其中部分文字的大小、...

网友评论

      本文标题:Android Span的使用

      本文链接:https://www.haomeiwen.com/subject/jmysqltx.html