如何在带有格式参数的字符串中使用html样式?

时间:2011-11-17 16:03:22

标签: java android

在我的应用中,我想在strings.xml中定义一个看起来像这样的格式字符串(注意<b>...</b>标签):

<string name="location"><b>Location:</b> %1$s</string>

然后使用getString(int, Object...)替换格式参数:

String formattedString = getString(R.string.location, "Edmonton, AB");

这会产生"Location: Edmonton, AB"的值。我想得到"<b>Location:</b> Edmonton, AB"的值。

有没有办法在strings.xml中使用字符串格式,而不将其分成两个字符串?

2 个答案:

答案 0 :(得分:19)

来自docs

  

有时您可能想要创建一个样式化的文本资源   用作格式字符串。通常情况下,这不起作用,因为   String.format(String,Object ...)方法将删除所有样式   来自字符串的信息。解决这个问题的方法就是编写   带有转义实体的HTML标记,然后使用   格式化后,fromHtml(String)。

例如:

<resources>
  <string name="welcome_messages">Hello, %1$s! You have &lt;b>%2$d new messages&lt;/b>.</string>
</resources>

确保在String.format()

中转义您传递的文字
String escapedUsername = TextUtils.htmlEncode(username);
Resources res = getResources();
String text = String.format(res.getString(R.string.welcome_messages), escapedUsername, mailCount);
CharSequence styledText = Html.fromHtml(text);

答案 1 :(得分:1)

使用String.Format。 e.g。

  <string name="location"><![CDATA[<b>Location:</b> %s]]></string>

String formattedString = String.Format(getString(R.string.location), "Edmonton, AB");