处理 Android 动态文本字符串在 res/values 中

18

假设有这个字符串:

你的玩家有一个不错的门将技能和一个相当好的人际技能

现在字符串中未加粗的部分始终相同,已知运行时加粗的部分。

那么如何实现以下操作:

你的玩家有一个{var1}门将技能和一个{var2}人际技能

然后在运行时填入正确的值来填充这些变量?

我不想像这样连接字符串:

"You player has a"  + var1  + "keeper skill and a"  + var2 + "people skill"

Resources.getString(resId, ...)Context.getString(resId, ...) 与类似于 "你的玩家有 %1$s 的守门技能和 %2$s 的人际技能" 的字符串是你要找的吗? - Salw
4个回答

46
你需要查看Android字符串资源指南。有一种方法可以提供静态字符串,稍后可以使用变量格式化。 http://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStyling 你将定义类似以下的字符串:
<resources>
  <string name="welcome_messages">Hello, %1$s! You have &lt;b>%2$d new messages&lt;/b>.</string>
</resources>

之后在代码中,您可以替换为

Resources res = getResources();
String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);
CharSequence styledText = Html.fromHtml(text);

谢谢,您的回答已被接受,以保证链接和代码的完整性。 - dierre
有关格式化字符串标记的更多信息,请访问http://developer.android.com/reference/java/util/Formatter.html。 - stackuser83
'fromHtml(String!): Spanned!'已被弃用。在Java中已经废弃。 - undefined

11

在 Strings.xml 文件中

You player has a %1$d  keeper skill and a %2$d people skill

在Java中

getString(R.string.article_stats, var1, var2);

8

是的,请查看Android开发指南中的以下内容:

如果您需要使用String.format(String, Object...)格式化字符串,则可以将格式化参数放入字符串资源中。例如,对于以下资源:

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

在此示例中,格式字符串有两个参数: %1$s 是一个字符串,%2$d 是一个十进制数字。您可以使用应用程序的参数来格式化字符串,例如:
Resources res = getResources();
String text = String.format(
    res.getString(R.string.welcome_messages),
    username, mailCount);

3
在字符串xml中,您可以在CDATA标记中定义HTML语法,例如:
<![CDATA[<b> %1$s bought </b>, last purchased from %2$s <b> %3$s </b>]]>

在你的Java类中

String detail =  String.format(getString(R.string.detail),15,"New Delhi","23 mins ago");
        detailView.setText(Html.fromHtml(detail ));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接