首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SpannableStringBuilder多次设置ClickableSpan,无法单击

SpannableStringBuilder多次设置ClickableSpan,无法单击
EN

Stack Overflow用户
提问于 2015-04-08 11:53:02
回答 1查看 519关注 0票数 3

我需要将相同的CharacterStyle附加到多个地域,所以我使用CharacterStyle.wrap()。则所有区域都带有下划线,但不可单击。可能的原因是什么?

代码语言:javascript
复制
 ssb.setSpan(CharacterStyle.wrap(clickableSpan), start, end, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
EN

回答 1

Stack Overflow用户

发布于 2016-01-10 04:49:09

这可能是Android框架中的一个bug。核心问题要么是SpannableStringBuilder.getSpans()方法的实现,要么是处理ClickableSpanLinkMovementMethod的实现。

LinkMovementMethodonTouchEvent() implementation使用getSpans()SpannableStringBuilder请求所有ClickableSpan实例,该all基本上使用instanceof过滤其跨度。但问题是,如果您使用CharacterStyle.wrap(),那么您的span不再是ClickableSpan实例,而是CharacterStyle.Passthrough实例。因此,getSpans()不再返回它,并且它不再是可点击的。

请注意,文本外观(绘图)不受此影响,因此它看起来仍然像ClickableSpan

现在,要修复这个问题,您必须扩展SpannableStringBuilder以修复getSpans()实现(这太复杂了),或者扩展LinkMovementMethod.onTouchEvent()实现以手动过滤ClickableSpan。您可以找到一个example here,然后将其与一起使用

代码语言:javascript
复制
textview.setMovementMethod(new FixedLinkMovementMethod());

但话又说回来,如果是一个ClickableSpan而不是使用CharacterStyle.wrap(),那么手动复制跨度可能会更容易。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29505622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档