我有这样的声明:
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 中的换行符无论如何都会被忽略。
您的选择包括:
生成一个完整 HTML fragment - 包括您尝试将其连接到的任何内容 - 然后使用
Html.fromHtml()
就整个事情而言。您可能希望使用模板引擎(例如 jmustache ),或String.format()
。或者,使用StringBuilder
,而不是大量+
操作(更少的内存变动,更快的性能)。请务必使用<br/>
或<p>
用于换行符/段落分隔符。使用
SpannableStringBuilder
从各个组成部分组装字符串及其格式。使用
TextUtils.concat(s, Html.fromHtml(...))
而不是s + Html.fromHtml(...)
,如concat()
将维护实现格式化的跨度。同时执行Spanned
返回者fromHtml()
不是String
,它和String
是CharSequence
,因此与concat()
一起工作.
关于java - 如何在 TextView 中选择性地加粗文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23814943/