我如何合并单个字符串的两个不同的spannable对象

时间:2018-03-20 07:24:03

标签: android html spannablestring spannable spannablestringbuilder

我有两个spannable对象用于相同的字符串,两者都有不同的样式。我需要合并所有spannable个对象,并将所有样式显示为TextView

Html.fromHtml()返回,第二次返回StyleSpan(Bold)。

我尝试了TextUtils.concate(htmlSpan, boldSpan),但它显示了两次相同的字符串,因为它附加了spannable,我希望将所有样式显示为单个字符串。

2 个答案:

答案 0 :(得分:0)

使用SpannableStringBuilder,但您可以在append方法

中创建范围
SpannableStringBuilder sb = new SpannableStringBuilder();
sb.append(String.valueOf(Html.fromHtml(stringToConvert));
sb.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, sb.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

然后只需将sb设置为您的视图

textView.setText(sb);

修改

我看到了你编辑过的问题,上面我重写了这段代码,让它在一个字符串上应用两个spannables。我认为你不能在一个字符串上合并不同的spannable对象。我相信解决方法是应用一个跨度,然后转换为字符串然后应用第二个跨度。这样它将两个跨度应用于一个字符串。或者,如果您总是需要粗体

,则可以通过xml管理粗体文本类型

答案 1 :(得分:0)

最后我发现我的解决方案,Html.fromHtml()没有spannable类型参数,所以首先我从Html.fromHtml()获得SpannableStringBuilder并将其转换为创建Bold StyleSpannable方法然后设置为TextView,它工作得很棒。

它将HTML可扩展为粗体StyleSpannable方法。

感谢大家的反馈和回复。

SpannableStringBuilder spannable = setTextViewHTML(content);
common.convertBoldString(spannable);

textView.setText(spannable);

对于上面的代码,内容是一个变量,其中包含我喜欢加粗的单词,它还包含HTML标记。

convertBoldString是我的Common方法类中的方法,它有参数 SpannableStringBuilder此对象用于设置粗体StyleSpan。