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

2022-09-03 06:25:04

在我的应用中,我想在字符串中定义一个格式字符串.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"

有没有办法在字符串中使用字符串格式来执行此操作.xml而无需将其拆分为两个字符串?


答案 1

文档中

有时,您可能希望创建一个样式化的文本资源,该资源也用作格式字符串。通常,这不起作用,因为 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);

答案 2

使用 String.Format。例如:

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

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

推荐