如何更改字符串内的部分文本格式(颜色,粗斜体)?

Posted

技术标签:

【中文标题】如何更改字符串内的部分文本格式(颜色,粗斜体)?【英文标题】:How to change the part of text format (color,sizebold italic) inside the string? 【发布时间】:2013-01-14 11:16:12 【问题描述】:

这是我的代码。我想部分更改字符串内的文本格式。

@Override
public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    String stuff[] = 

"this has to be  the bold part   this has to be normal part",
"this part of text has to be green      this part of text has to be blue",
"this is number 3 bold",

【问题讨论】:

这个字符串是静态的还是动态的? 创建多个 TextView,并将您的字符串拆分为它们。然后你可以为每个 TextView 分别设置样式 @MishaBhardwaj 动态和静态。 @VeaceslavGaidarji Thanx 但文本必须在单个文本视图中。我希望第一部分格式与第二部分不同,但在“第一部分第二部分”内,。 【参考方案1】:

您可以使用 html 格式:

textView.setText(Html.fromHtml("<b>test</b> test"));

【讨论】:

这种方法过于复杂,无法处理大量文本,因为部分合并为一个句子,在这个项目中我有许多文本组要处理。 为什么会太复杂?这似乎是向文本添加格式的最简单方法,无论您有多少文本。您仍然可以编写某种包装类,在设置某些样式时输出 HTML 格式的字符串。然后您只需连接这些字符串并将其设置为 TextView。 再次感谢我尝试处理它。【参考方案2】:

您必须使用SpannableStringBuilder,如下所示:

    String finalText = stuff[0]+ " " + stuff[1] + " " + stuff[2];
    int first = stuff[0].length() + 1;
    int second = stuff[1].length() + 1;
    int end = finalText.length();

    SpannableStringBuilder stringBuilder = new SpannableStringBuilder(finalText);
    stringBuilder.setSpan(new CustomTypefaceSpan("", normalFont), 0, first, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
    stringBuilder.setSpan(new CustomTypefaceSpan("", boldFont), first, first + second, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
    stringBuilder.setSpan(new CustomTypefaceSpan("", normalFont), first + second, end, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);

    textView.setText(stringBuilder);

【讨论】:

以上是关于如何更改字符串内的部分文本格式(颜色,粗斜体)?的主要内容,如果未能解决你的问题,请参考以下文章

[Android开发]富文本TextView修改部分字体颜色大小加粗斜体下划线删除线,以及添加点击事件,插入本地或网络图片

如何在颤动中使用粗体、斜体等格式化程序制作文本编辑器?

文本格式

HTML文本格式化

文本格式化标签

UnityTextMesh Pro