######为文字实现很丰富的特殊效果,下面来实现 点击事件/超链接 操作

so... 直接上效果:

##使用前提条件:

textView.movementMethod = LinkMovementMethod.getInstance()

cc:TextView必须设置此方法的前提下,才能选择受影响的文本范围,不然点击会没有任何效果

#1 设置点击事件:ClickableSpan

//ClickableSpan不能直接setSpan
class MClickableSpan(private val context: Context): ClickableSpan(){override fun updateDrawState(ds: TextPaint) {super.updateDrawState(ds)//设置点击文本的颜色ds.color = Color.BLUE//去除点击文本的默认的下划线ds.isUnderlineText = false}override fun onClick(widget: View) {//去除点击后字体出现的背景色(widget as? TextView)?.highlightColor = Color.TRANSPARENT//设置点击事件的动作context.startActivity(Intent(context, TextSpanActivity::class.java))}}
sb.setSpan(MClickableSpan(this),indexClick,indexClick + TEXT_CLICK.length,Spannable.SPAN_INCLUSIVE_EXCLUSIVE)

#2 设置超链接: URLSpan
 #直接使用:

sb.setSpan(URLSpan(url),index,index + TEXT_URL.length,Spannable.SPAN_INCLUSIVE_EXCLUSIVE)

#自定义使用:

class MURLSpan(private val context: Context, private val url: String) : URLSpan(url){override fun updateDrawState(ds: TextPaint) {super.updateDrawState(ds)//设置超链接文本的颜色ds.color = Color.RED//这里可以去除点击文本的默认的下划线ds.isUnderlineText = false}override fun onClick(widget: View) {
//========== 屏蔽原来默认动作-跳转至链接
//           super.onClick(widget)
//>>>>>>>>>>>//去除点击后字体出现的背景色(widget as? TextView)?.highlightColor = Color.TRANSPARENT//自定义超链接动作Toast.makeText(context, "自定义超链接动作", Toast.LENGTH_SHORT).show()}}
//这里是MURLSpan(this, url)
sb.setSpan(MURLSpan(this, url),index,index + TEXT_URL.length,Spannable.SPAN_INCLUSIVE_EXCLUSIVE)

##最后贴上Activity示例:

class TextClickSpanActivity : AppCompatActivity() {companion object {private const val TEXT_CONTENT = "Click: Today is Jul 25th"private const val TEXT_URL = "Jul"private const val TEXT_CLICK = "Today"private const val url = "https://blog.csdn.net/qq_20613731"}private val index by lazy { TEXT_CONTENT.indexOf(TEXT_URL) }private val indexClick by lazy { TEXT_CONTENT.indexOf(TEXT_CLICK) }override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_text_span_click)initView()}private fun initView() {text_type_url.text = getURLSpan(url)text_type_m_url.text = getMURLSpan(url)text_type_click.text = getTextClickableSpan()//TextView必须设置了此方法的前提下,才能选择受影响的文本范围text_type_url.movementMethod = LinkMovementMethod.getInstance()text_type_click.movementMethod = LinkMovementMethod.getInstance() text_type_m_url.movementMethod = LinkMovementMethod.getInstance()}//设置部分文字的超链接 URLSpanprivate fun getURLSpan(url: String): Spannable {val sb = SpannableStringBuilder(TEXT_CONTENT)sb.setSpan(URLSpan(url),index,index + TEXT_URL.length,Spannable.SPAN_INCLUSIVE_EXCLUSIVE)return sb}//设置部分文字的超链接 MURLSpan > URLSpanprivate fun getMURLSpan(url: String): Spannable {val sb = SpannableStringBuilder(TEXT_CONTENT)sb.setSpan(MURLSpan(this, url),index,index + TEXT_URL.length,Spannable.SPAN_INCLUSIVE_EXCLUSIVE)return sb}//设置部分文字的点击事件 MClickableSpan > ClickableSpanprivate fun getTextClickableSpan(): Spannable {val sb = SpannableStringBuilder(TEXT_CONTENT)sb.setSpan(MClickableSpan(this),indexClick,indexClick + TEXT_CLICK.length,Spannable.SPAN_INCLUSIVE_EXCLUSIVE)return sb}class MURLSpan(private val context: Context, private val url: String) : URLSpan(url){override fun updateDrawState(ds: TextPaint) {super.updateDrawState(ds)//设置超链接文本的颜色ds.color = Color.RED//这里可以去除点击文本的默认的下划线ds.isUnderlineText = false}override fun onClick(widget: View) {
//========== 屏蔽原来默认的跳转链接
//           super.onClick(widget)
//>>>>>>>>>>>//去除点击后字体出现的背景色(widget as? TextView)?.highlightColor = Color.TRANSPARENT//自定义超链接动作Toast.makeText(context, "自定义超链接动作", Toast.LENGTH_SHORT).show()}}class MClickableSpan(private val context: Context): ClickableSpan(){override fun updateDrawState(ds: TextPaint) {super.updateDrawState(ds)//设置点击文本的颜色ds.color = Color.BLUE//去除点击文本的默认的下划线ds.isUnderlineText = false}override fun onClick(widget: View) {//去除点击后字体出现的背景色(widget as? TextView)?.highlightColor = Color.TRANSPARENT//设置点击事件的动作context.startActivity(Intent(context, TextSpanActivity::class.java))}}
}

Spanable相关使用...

>>Spannable

>>URLSpan/ClickableSpan

>>ReplacementSpan

>>ImageSpan

demo地址:Android Span富文本设置

(欢迎讨论~)

Android Span富文本设置点击事件/超链接 - URLSpan/ClickableSpan相关推荐

  1. 富文本带点击事件的解决方案

    富文本带点击事件的解决方案 效果 分析 富文本中要添加点击link事件,需要深入到CoreText里面才能够解决,本人将TTTAttributedLabel进行了封装(封装并不完全,以后会继续完善), ...

  2. yylabel html富文本,YYLabel 自动布局 富文本文字点击事件

    YYLabel显示多行除了需要设置numberOfLines = 0以外,还需要设置preferredMaxLayoutWidth最大的宽度值才可以生效多行效果 YYLabel中的NSMutableA ...

  3. YYLabel 自动布局 HTML字符串转富文本和 富文本文字点击事件

    1. HTML字符串转富文本    在写一个IOS的APP时,有一部分片段是HTML字符串,这时候我们需要转化为可变的NSMutableAttributedString 并且识别里面的超链接,.代码如 ...

  4. android富文本图片自适应,Android Span富文本图文混排 - ImageSpan(图文垂直居中)...

    ###为文字实现很丰富的特殊效果,当然少不了图文混排 so... 直接上效果(有直接使用和自定义垂直居中效果) ##1 ImageSpan: ImageSpan(context, resourceId ...

  5. 在XML布局里给View设置点击事件

    给一个View设置监听点击事件是再普通不过的事情,比如 view.setOnClickListener(onClickListener); 另外一种做法是直接在XML布局里面指定View点击时候的回调 ...

  6. Android实现侧滑抽屉菜单,android studio自带的抽屉侧滑菜单怎么设置点击事件?还头一回遇到,汗!...

    在你的activity,你需要inflate 你的menu folder@Override public boolean onCreateOptionsMenu(Menu menu) { MenuIn ...

  7. android点击linearlayout没反应,LinearLayout设置点击事件的问题

    我给LinearLayout设置点击事件,LinearLayout中有一个ImageButton和一个TextView,为什么我点击Imagebutton无法触发点击事件,点击TextView就会触发 ...

  8. Android的富文本

    1:富文本的相关内容 富文本设置 它是用来标识在 Span 范围内的文本前后输入新的字符时是否把它们也应用这个效果.分别有 Spanned.SPAN_EXCLUSIVE_EXCLUSIVE(前后都不包 ...

  9. 安卓使用Span富文本给某段Text文本加上波浪线

    前言 最近项目需要给某段文字动态的加上波浪线,但是没搜到什么好的方案,于是打算自己实现一下,效果如下: 正文 本文使用的方案是自定义Span富文本,并在Span中用贝塞尔曲线来绘制出波浪线 代码如下: ...

最新文章

  1. 网络流学习(转载自ssw 的博客)
  2. md5sum算法 —— linux或Unix上,md5sum是用来计算和校验文件报文摘要的工具程序
  3. 线索二叉树原理及前序、中序线索化(Java版)
  4. k8s ready 不调度_从零开始学K8s: 10.在K8s上运行应用
  5. 分享一套非常不错的bootstarp3.0.2响应式模板
  6. Python学习之Python安装
  7. 众筹网站系统源码+手机端
  8. dpg learning 和q_深度学习和强化学习之间的差别有多大?
  9. python字典购物车实现的功能_python购物车功能实现
  10. php在函数中定义全局变量,PHP 全局变量在用户自定义函数内部不足见
  11. 随笔(1)——慢性意识障碍患者的智慧诊疗和远程管理
  12. opencv4 图像特征匹配_【从零学习OpenCV 4】图像模板匹配
  13. karma看fits文件软件操作汇总【第三个维度的变化】【查看某个范围的RMS值】
  14. (转)关于最近疯狂流行的文件夹变成exe文件的病毒查杀办法
  15. 手把手教你学51单片机_第四、五章
  16. 决定系数R2相关知识,以及与相关系数之间的关系
  17. UEStudio正则使用实例三则
  18. 闲人闲谈PS之三十——新收入准则中的合同资产和合同负债
  19. 模电multisim实验
  20. MS开始提供Windows Vista beta2下载

热门文章

  1. 弘辽科技:淘宝描述区页面的高度是多少?高了怎么减去?
  2. 关于SpringCloud报错Unsatisfied dependency expressed through field ‘propertySourceLocators的解决之一
  3. js 字符串去除收尾空格
  4. windows phone(成语典籍游戏开发)
  5. 它是人类吗?人工智能VS人类大脑
  6. Linux 动画显示
  7. Mysql基础知识+部分进阶知识
  8. 新冷战阴影下的东欧黑客沉浮记
  9. 动手学深度学习之多层感知机
  10. Matlab之一行代码生成服从三角分布随机数