我需要將同一個CharacterStyle
附加到多個區域,所以我使用CharacterStyle.wrap()
。然後所有區域都加下劃線但不可點擊。 可能的原因是什麼?SpannableStringBuilder多次設置ClickableSpan,無法點擊
ssb.setSpan(CharacterStyle.wrap(clickableSpan), start, end, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
我需要將同一個CharacterStyle
附加到多個區域,所以我使用CharacterStyle.wrap()
。然後所有區域都加下劃線但不可點擊。 可能的原因是什麼?SpannableStringBuilder多次設置ClickableSpan,無法點擊
ssb.setSpan(CharacterStyle.wrap(clickableSpan), start, end, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
這可能是Android框架中的一個錯誤。核心問題是執行方法SpannableStringBuilder.getSpans()
或執行LinkMovementMethod
,應該處理ClickableSpan
。
的LinkMovementMethod
要求所有ClickableSpan
實例從SpannableStringBuilder
與getSpans()
與instanceof
基本上過濾其跨度的onTouchEvent()
implementation。但問題是如果您使用CharacterStyle.wrap()
,則您的範圍不再是ClickableSpan
實例,而是CharacterStyle.Passthrough
實例。因此getSpans()
不再返回它,它不再可點擊。
請注意,文本外觀(繪圖)不受此影響,因此它仍然看起來像一個ClickableSpan
。
現在,爲了解決這個問題,你要麼必須擴展SpannableStringBuilder
修復getSpans()
實現(這也太複雜),或延長LinkMovementMethod.onTouchEvent()
實現手動篩選ClickableSpan
。你可以發現,然後可以用
textview.setMovementMethod(new FixedLinkMovementMethod());
但隨後再次使用example here,也許這將是更容易只是手動複製如果一個ClickableSpan
而不是使用CharacterStyle.wrap()
的跨度。
我體驗相同 - 你找到了解決辦法嗎? –