Android中使用Spannable为指定文本设色失效的技术求助
问题根源与解决方案
嘿,我一眼就瞅出问题所在了——你调用了SpannableString.toString(),这个操作会直接丢掉所有附加的Span样式,只返回纯文本内容,所以WebView根本没法渲染出带颜色的部分。
方案一:适配WebView的HTML样式方案
既然你是用WebView展示内容,直接生成带HTML标签的文本是更适配的做法,毕竟WebView本身就是基于HTML渲染的:
val originalText = "I know just how to whisper, And I know just how to cry,I know just where to find the answers" // 截取需要变色的区间,用<span>标签包裹设置蓝色 val htmlText = StringBuilder() .append(originalText.substring(0, 15)) .append("<span style='color: #0000FF;'>") .append(originalText.substring(15, 30)) .append("</span>") .append(originalText.substring(30)) .toString() // 用loadData加载HTML内容 itemView.webViewFeedContent.loadData(htmlText, "text/html", "UTF-8")
方案二:如果可以用TextView(原生Span方案)
如果你的场景不需要WebView,只是误选了控件,那修正原代码即可——绝对不要把Spannable转成String:
val wordtoSpan: Spannable = SpannableString("I know just how to whisper, And I know just how to cry,I know just where to find the answers") wordtoSpan.setSpan(ForegroundColorSpan(Color.BLUE), 15, 30, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) // 直接把Spannable对象设置给TextView,跳过toString() itemView.textViewFeedContent.text = wordtoSpan
小知识点补充
SpannableString的样式是作为“附加标记”存在的,toString()方法只会提取底层的纯字符序列,不会携带这些样式信息。所以只要你把它转成String,之前设置的所有Span就都白忙活了~
内容的提问来源于stack exchange,提问作者Vinitha
相关产品推荐
相关产品推荐

