2015-04-08 47 views
2

我需要將同一個CharacterStyle附加到多個區域,所以我使用CharacterStyle.wrap()。然後所有區域都加下劃線但不可點擊。 可能的原因是什麼?SpannableStringBuilder多次設置ClickableSpan,無法點擊

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

我體驗相同 - 你找到了解決辦法嗎? –

回答

2

這可能是Android框架中的一個錯誤。核心問題是執行方法SpannableStringBuilder.getSpans()或執行LinkMovementMethod,應該處理ClickableSpan

LinkMovementMethod要求所有ClickableSpan實例從SpannableStringBuildergetSpans()instanceof基本上過濾其跨度的onTouchEvent() implementation。但問題是如果您使用CharacterStyle.wrap(),則您的範圍不再是ClickableSpan實例,而是CharacterStyle.Passthrough實例。因此getSpans()不再返回它,它不再可點擊。

請注意,文本外觀(繪圖)不受此影響,因此它仍然看起來像一個ClickableSpan

現在,爲了解決這個問題,你要麼必須擴展SpannableStringBuilder修復getSpans()實現(這也太複雜),或延長LinkMovementMethod.onTouchEvent()實現手動篩選ClickableSpan。你可以發現,然後可以用

textview.setMovementMethod(new FixedLinkMovementMethod()); 

但隨後再次使用example here,也許這將是更容易只是手動複製如果一個ClickableSpan而不是使用CharacterStyle.wrap()的跨度。