“Android Utils“ 实现TextView 区域自定义点击

Posted 斯音

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了“Android Utils“ 实现TextView 区域自定义点击相关的知识,希望对你有一定的参考价值。

需求

项目中常有需求:要求长段文本中实现点击局部文本并执行自定义事件。本文针对类似需求进行简易的分析并编写相关工具类。

分析

首先多TextView实现肯定是不行的:一是代码冗余;二是若可点击文本换行时不好处理。

接着看其效果类似超链接,自然想到使用html.fromHtml,将可点击区域加上a标签。可是点击a标签默认会调用外部浏览器打开指定链接。跟进Html.fromHtml方法可知,其返回的是一个Spanned

public static Spanned fromHtml(String source)

既然是Spanned,那自然是可以自定义的。

思路:给可点击文本加上a标签,获取Html.fromHtml返回的Spanned中的UrlSpan部分,在相同位置添加自定义ClickSpan实现自定义事件,代码如下:

Spanned html = Html.fromHtml(text);
URLSpan[] spans = html.getSpans(0, text.length(), URLSpan.class);
SpannableStringBuilder builder = new SpannableStringBuilder(html);
builder.clearSpans();
for (URLSpan span : spans) 
	  String url = span.getURL();//获取a标签中的url
  	//添加点击事件

同时创建一个map,key可以为url,value为相应的点击事件。添加ClickSpan同时可以添加其他样式Span。

完整代码:

pu

以上是关于“Android Utils“ 实现TextView 区域自定义点击的主要内容,如果未能解决你的问题,请参考以下文章

“Android Utils“ 实现TextView 区域自定义点击

java 添加指向TextView的链接。 Linkify。字体:https://stackoverflow.com/questions/4746293/android-linkify-textvie

java.lang.ClassCastException: android.widget.RelativeLayout cannot be cast to android.widget.TextVie

来自 android:android-maps-utils 的 ClusterManager 已更改且不兼容

无法通过 gradle 导入 com.google.maps.android:android-maps-utils

java Android Utils