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

上面就是系统提供的所有可用的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的使用相关推荐

  1. android中view用法,Android中ImageView用法实例分析

    本文实例分析了Android中ImageView用法.分享给大家供大家参考,具体如下: 猜牌游戏大家可能以前都玩过,这里我们用这个小游戏来说明ImageView的用法. 首先,在res/drawabl ...

  2. android span的用法,android – 如何使用TextAppearanceSpan

    编辑: 你可以使用SuperscriptSpan() Spannable WordtoSpan = new SpannableString("13.500,27"); Wordto ...

  3. android palette组件用法,Android Support Palette使用详解

    使用Palette API选择颜色 良好的视觉设计是app成功所必不可少的, 而色彩设计体系是设计的基础构成. Palette包是支持包, 能够从图片中解析出突出的颜色, 从而帮助你创建出视觉迷人的应 ...

  4. android palette组件用法,Android Material Design:使用Palette优化界面色彩搭配。

    我写过一篇博客介绍了常用Material Design控件的使用. http://www.jianshu.com/p/776cc6329fff 本想把大部分的Material Design的知识点写到 ...

  5. android palette组件用法,android Palette使用详解

    Palette是一个可以从图片(Bitmap)中提取颜色的帮助类,可以使UI更加美观,根据图片动态的显示相应的颜色.现在最新的api是在版本22.0.0添加的,本篇文章也是使用的22.0.0的api版 ...

  6. android palette组件用法,Android Palette(调色板)的使用

    一.Palette的简单介绍 android-support-v7-palette 里面的Palette是Android L SDK 中的新特性,可以使用 Palette 从图像中提取出突出的颜色(主 ...

  7. android palette组件用法,android Palette调色板使用详解

    Palette是一个可以从图片(Bitmap)中提取颜色的帮助类,可以使UI更加美观,根据图片动态的显示相应的颜色.现在最新的api是在版本22.0.0添加的,本篇文章也是使用的22.0.0的api版 ...

  8. 49.Android中各种Span的用法

    49.Android中各种Span的用法 Android中各种Span的用法 前言 SpannableStringBuilder URLSpan UnderlineSpan TypefaceSpan ...

  9. Android中各种Span的用法——转载

    转载一篇觉得很好的文章,在转载中成长:https://blog.csdn.net/qq_16430735/article/details/50427978 Android中各种Span的用法 前言 S ...

最新文章

  1. 计算机启动和操作系统加载小话
  2. Consul入门04 - Consul集群
  3. Docker中安装DB2的详细教程和DBVisualize的安装教程
  4. QT读取Word文档
  5. INVALID_HANDLE_VALUE 、 NULL、nullptr 和 nullptr_t 的联系
  6. SAP ABAP CDS view里的注解在ABAP后台是如何被解析的?
  7. [Hei-Ocelot-Gateway ].Net Core Api网关Ocelot的开箱即用版本
  8. java 代码换行_作为一名资深的程序员,你见过哪些很想吐槽的代码
  9. CC2530基础实验二:电源管理与睡眠定时器
  10. hdu1107+武林+模拟
  11. Oracle 之利用BBED修改数据块SCN----没有备份数据文件的数据恢复
  12. 定制化centos7
  13. 2021届双非本科的心酸秋招经历总结及经验分享
  14. python中pip如何更新到最新版本
  15. 只有网安人才知道的事情!
  16. 数据中台已成下一风口,它会颠覆数据工程师的工作吗?
  17. 【星辰傀儡线·命运环·卷二 尘埃】 4 蓝月
  18. 基于STM32的ADS8688驱动
  19. 社交电商:拼团与分销商业模式的区别在哪里?
  20. pi在c语言中代表什么6,《光纤通信技术》综合练习

热门文章

  1. 【PAT甲级 删除字符串中的指定字符】1050 String Subtraction (20 分) C++
  2. 【计算机学科】最好的学校排名
  3. Linux网络编程 之 套接字(四)
  4. Dev C++ 无法调试问题的解决——小白也能看懂!
  5. 数据结构中图的一些定义
  6. 数据结构题:根据所给权值设计相应的哈夫曼树,并设计哈夫曼编码
  7. 目前计算机科学研究的最前沿的课题之一,04大学计算机础课程试卷.doc
  8. dede 验证码不显示 vdimgck.php,Dede后台验证码不显示解决方法详解(dedecms 5.7)
  9. shell脚本详解(十)——sed编辑器的使用方法
  10. miniGUI安装笔记(转)