gpt4 book ai didi

android - SpannableStringBuilder多次设置ClickableSpan,点击不了

转载 作者:行者123 更新时间:2023-11-29 00:12:07 27 4
gpt4 key购买 nike

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

 ssb.setSpan(CharacterStyle.wrap(clickableSpan), start, end, Spanned.SPAN_INCLUSIVE_INCLUSIVE);

最佳答案

这可能是 Android 框架中的错误。核心问题是方法的实现 SpannableStringBuilder.getSpans()或执行 LinkMovementMethod应该处理 ClickableSpan

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

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

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

一起使用
textview.setMovementMethod(new FixedLinkMovementMethod());

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

关于android - SpannableStringBuilder多次设置ClickableSpan,点击不了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29505622/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com