我需要将相同的CharacterStyle附加到多个地域,所以我使用CharacterStyle.wrap()。则所有区域都带有下划线,但不可单击。可能的原因是什么?
ssb.setSpan(CharacterStyle.wrap(clickableSpan), start, end, Spanned.SPAN_INCLUSIVE_INCLUSIVE);发布于 2016-01-10 04:49:09
这可能是Android框架中的一个bug。核心问题要么是SpannableStringBuilder.getSpans()方法的实现,要么是处理ClickableSpan的LinkMovementMethod的实现。
LinkMovementMethod的onTouchEvent() implementation使用getSpans()从SpannableStringBuilder请求所有ClickableSpan实例,该all基本上使用instanceof过滤其跨度。但问题是,如果您使用CharacterStyle.wrap(),那么您的span不再是ClickableSpan实例,而是CharacterStyle.Passthrough实例。因此,getSpans()不再返回它,并且它不再是可点击的。
请注意,文本外观(绘图)不受此影响,因此它看起来仍然像ClickableSpan。
现在,要修复这个问题,您必须扩展SpannableStringBuilder以修复getSpans()实现(这太复杂了),或者扩展LinkMovementMethod.onTouchEvent()实现以手动过滤ClickableSpan。您可以找到一个example here,然后将其与一起使用
textview.setMovementMethod(new FixedLinkMovementMethod());但话又说回来,如果是一个ClickableSpan而不是使用CharacterStyle.wrap(),那么手动复制跨度可能会更容易。
https://stackoverflow.com/questions/29505622
复制相似问题