如何在TextView中选择加粗文本

时间:2014-05-22 18:50:37

标签: 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,Name等)。

我试过了:

        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)。有关如何完成这项工作的任何想法?感谢。

2 个答案:

答案 0 :(得分:0)

在你的结尾需要一点点解析,但你肯定想看看SpannableStrings

例如,假设我有以下字符串:

String s = "How now brown cow";

然后我将它转换为SpannableString,只需将字符串输入构造函数,如下所示:

SpannableString ss = new SpannableString(s);

从那里你需要你的跨度区域的风格。为此,我将使用SubscriptSpan,但如果您想自己创建,则只需将自己的类扩展为CharacterStyle并覆盖updateDrawState(TextPaint ds)方法即可。以下是如何设置范围:

/ *
  * the first argument is the span effect you want, the second and third
  * are the start and end indices, respectively, and the last argument is
  * for setting a flag, which you probably won't need.
  */
ss.setSpan(new SubscriptSpan(), 0, 2, 0);

现在你可以直接把你的字符串放到TextView中,它应该如你所愿,如下所示:

myTextView.setText(ss);

答案 1 :(得分:0)

Html.fromHtml()会返回一个Spanned对象,旨在将直接放入TextView或类似的小部件中。

Spanned不是String

通过执行s = s + Html.fromHtml(...),您说“请将此HTML解析为Spanned,然后抛弃所有格式以给我String我可以连接到其他{ {1}}”。这不是你想要的 - 你想保持格式化。但是Java String没有格式化,因此普通的字符串连接无法保留它。

除此之外,正如Manishika指出的那样,无论如何,HTML都会忽略换行符,因为你将HTML元素用于垂直空格。

您的选择包括:

  1. 生成完整 HTML代码段 - 包括您尝试将其连接到的所有内容 - 然后在整个内容中使用String。您可能希望使用模板引擎(例如jmustache)或Html.fromHtml()。或者,使用String.format(),而不是大量的StringBuilder操作(更少的内存流失,更快的性能)。请务必使用+<br/>作为换行符/段落分隔符。

  2. 使用<p>从组件中组装字符串及其格式。

  3. 使用SpannableStringBuilder代替TextUtils.concat(s, Html.fromHtml(...)),因为s + Html.fromHtml(...)将维护实现格式化的范围。虽然concat()返回的Spanned的实施不是fromHtml(),但它和String都是String,因此可以使用CharSequence