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

时间:2011-10-04 10:41:13

标签: android

假设我有这个字符串:

您的玩家拥有良好守门员技能和体面人员技能

现在字符串中不以粗体显示的部分始终相同,运行时已知的部分是粗体部分。

那我怎么能这样做:

您的玩家拥有 {var1} 守门员技能和 {var2} 人员技能

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

我不想连接像:

这样的字符串
"You player has a"  + var1  + "keeper skill and a"  + var2 + "people skill"

4 个答案:

答案 0 :(得分:36)

您需要查看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);

答案 1 :(得分:7)

在Strings.xml中

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

在java中

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

答案 2 :(得分:4)

是的,请参阅android devguide

中的以下内容

如果需要使用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 :(得分: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 ));