Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SpannableStringBuilder set clickable span不止一次,可以';点击_Android - Fatal编程技术网

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可能会更容易些。我也经历过同样的情况-你找到解决方法了吗?