在我的应用中,我想在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中使用字符串格式,而不将其分成两个字符串?
答案 0 :(得分:19)
来自docs:
有时您可能想要创建一个样式化的文本资源 用作格式字符串。通常情况下,这不起作用,因为 String.format(String,Object ...)方法将删除所有样式 来自字符串的信息。解决这个问题的方法就是编写 带有转义实体的HTML标记,然后使用 格式化后,fromHtml(String)。
例如:
<resources>
<string name="welcome_messages">Hello, %1$s! You have <b>%2$d new messages</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");