Android SpannableStringBuilder set clickable span不止一次,可以';点击
我需要将相同的Android SpannableStringBuilder set clickable span不止一次,可以';点击,android,Android,我需要将相同的CharacterStyle附加到多个区域,因此我使用CharacterStyle.wrap()。然后所有区域都加下划线,但不可单击。 可能的原因是什么 ssb.setSpan(CharacterStyle.wrap(clickableSpan), start, end, Spanned.SPAN_INCLUSIVE_INCLUSIVE); 这可能是Android框架中的一个bug。核心问题要么是方法的实现,要么是应该处理ClickableSpans的方法的实现 LinkMov
CharacterStyle
附加到多个区域,因此我使用CharacterStyle.wrap()
。然后所有区域都加下划线,但不可单击。
可能的原因是什么
ssb.setSpan(CharacterStyle.wrap(clickableSpan), start, end, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
这可能是Android框架中的一个bug。核心问题要么是方法的实现,要么是应该处理
ClickableSpan
s的方法的实现
LinkMovementMethod
的函数从SpannableStringBuilder
请求所有ClickableSpan
实例,该函数基本上使用instanceof
过滤其span。但问题是,如果使用CharacterStyle.wrap()
您的span不再是ClickableSpan
实例,而是CharacterStyle.Passthrough
实例。因此,getspan()
不再返回它,也不再可以单击它
请注意,文本外观(图形)不受此影响,因此它看起来仍然像一个可点击span
现在,要解决此问题,您必须扩展SpannableStringBuilder
来修复getspan()
实现(这太复杂了),或者扩展LinkMovementMethod.onTouchEvent()
实现来手动过滤ClickableSpan
。您可以找到一个可用于
textview.setMovementMethod(new FixedLinkMovementMethod());
但是再说一遍,如果span是
可点击span
而不是使用CharacterStyle.wrap()
的话,手动复制span可能会更容易些。我也经历过同样的情况-你找到解决方法了吗?