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

Gre*_*reg 16 java android

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

<string name="location"><b>Location:</b> %1$s</string>
Run Code Online (Sandbox Code Playgroud)

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

String formattedString = getString(R.string.location, "Edmonton, AB");
Run Code Online (Sandbox Code Playgroud)

这会产生一个值"Location: Edmonton, AB".我想得到一个值"<b>Location:</b> Edmonton, AB".

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

Pau*_*rke 20

来自文档:

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

确保转义您传入的文本 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);
Run Code Online (Sandbox Code Playgroud)