java - 如何在 TextView 中选择性地加粗文本

标签 java android text

我有这样的声明:

s = s +   "Id: " + lc.getID() + "  Name: " + lc.getName() + "\n"
                + "  Phone Number: " + lc.getPhone() + "  Email: " + lc.getEmail() + "\n"
                + "  Description: " + lc.getDescription() + "\n\n"

打印出来:

Id: 1  Name: Eric
 Phone Number: 8294038  Email: foo@gmail.com
 Description: Cool guy Eric

我只想将标题(ID、名称等)加粗。

我尝试过这个:

        s = s + Html.fromHtml(" <b> Id: </b>" + lc.getID() + "  <b> Name: </b>" + lc.getName() + "\n"
                + "  Phone Number: " + lc.getPhone() + "  Email: " + lc.getEmail() + "\n"
                + "  Description: " + lc.getDescription() + "\n"
                + "\n\n");

但它不仅没有加粗,而且还去掉了新行(\n)。关于如何完成这项工作有什么想法吗?谢谢。

最佳答案

Html.fromHtml()返回 Spanned对象,设计为直接放入TextView或类似的小部件。

一个Spanned不是String .

通过做s = s + Html.fromHtml(...) ,你的意思是“请将此 HTML 解析为 Spanned ,然后扔掉所有格式,给我一个 String ,我可以将其连接到其他一些 String ”。这不是您想要的——您想要保留格式。但是Java String没有格式化,所以普通的字符串连接无法保留它。

除此之外,正如 Manishika 指出的那样,当您使用 HTML 元素作为垂直空白时,HTML 中的换行符无论如何都会被忽略。

您的选择包括:

  1. 生成一个完整 HTML fragment - 包括您尝试将其连接到的任何内容 - 然后使用 Html.fromHtml()就整个事情而言。您可能希望使用模板引擎(例如 jmustache ),或 String.format() 。或者,使用StringBuilder ,而不是大量 +操作(更少的内存变动,更快的性能)。请务必使用<br/><p>用于换行符/段落分隔符。

  2. 使用SpannableStringBuilder从各个组成部分组装字符串及其格式。

  3. 使用TextUtils.concat(s, Html.fromHtml(...))而不是s + Html.fromHtml(...) ,如concat()将维护实现格式化的跨度。同时执行Spanned返回者 fromHtml()不是String ,它和 StringCharSequence ,因此与 concat() 一起工作.

关于java - 如何在 TextView 中选择性地加粗文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23814943/

相关文章:

Java 分割 CSV 忽略 HTML 字符

android - 使用 Delphi 10.3 在 Android 应用程序中隐藏虚拟键盘

java - 适用于 Android 的 Facebook SDK "An error has occurred with MyApp. Please try again later"

java - 如何使用Java突出显示文档中的文本?

Javafx 点击一个圆圈并获取它的引用

java - java后端使用输入存在名称时如何快速提示可用名称

android - 方向改变时键盘隐藏

Java URL 文本文件转字符串

linux - 删除几乎没有差异的重复行

java - 赋值不返回 void