在string.xml
字符串值中string.xml
可以在运行时分配占位符?
例:
一些字符串PLACEHOLDER1一些其他字符串
#1楼
但是,您还应该阅读EliasMårtenson关于Android的“零”复数处理的答案。 某些值(例如“零”)的解释存在问题。
#2楼
当您想使用实际的strings.xml文件中的参数而不使用任何Java代码时:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE resources [
<!ENTITY appname "WhereDat">
<!ENTITY author "Oded">
]>
<resources>
<string name="app_name">&appname;</string>
<string name="description">The &appname; app was created by &author;</string>
</resources>
这不适用于资源文件,即必须将变量复制到需要它们的每个XML文件中。
#3楼
一直在寻找相同的东西,终于找到了以下非常简单的解决方案。 最佳:开箱即用。
1.更改您的字符串资源:
<string name="welcome_messages">Hello, <xliff:g name="name">%s</xliff:g>! You have
<xliff:g name="count">%d</xliff:g> new messages.</string>
2.使用字符串替换:
c.getString(R.string.welcome_messages,name,count);
其中c是上下文, name是一个字符串变量,并计算 int变量
您需要包括
<resources xmlns:xliff="http://schemas.android.com/apk/res-auto">
在您的res / strings.xml中。 为我工作。 :)
#4楼
格式和样式
如果需要使用
String.format(String, Object...)
格式化字符串,则可以通过将format参数放在字符串资源中来实现。 例如,使用以下资源:<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);
基本用法
请注意, getString
具有将字符串用作格式字符串的重载:
String text = res.getString(R.string.welcome_messages, username, mailCount);
复数
如果需要处理复数,请使用以下命令:
<plurals name="welcome_messages">
<item quantity="one">Hello, %1$s! You have a new message.</item>
<item quantity="other">Hello, %1$s! You have %2$d new messages.</item>
</plurals>
第一个mailCount
参数用于确定要使用的格式(单数或复数),其他参数是您的替代:
Resources res = getResources();
String text = res.getQuantityString(R.plurals.welcome_messages, mailCount, username, mailCount);
有关更多详细信息,请参见字符串资源:复数 。
#5楼
补充答案
当我第一次在接受的答案中看到%1$s
和%2$d
时,这没有任何意义。 这里有更多解释。
它们被称为格式说明符。 在xml字符串中,它们的形式为
%[parameter_index$][format_type]
- % :百分号标记格式说明符的开始。
- 参数索引 :这是一个数字,后跟一个美元符号。 如果您有三个要插入到字符串中的参数,那么它们将被称为
1$
,2$
和3$
。 将它们放置在资源字符串中的顺序无关紧要,只需要提供参数的顺序即可。 格式类型 :有很多 ,你可以格式化事情的方式( 请参阅文档 )。 这是一些常见的:
-
s
字符串 -
d
十进制整数 -
f
浮点数
-
例
我们将创建以下格式的字符串,其中以编程方式插入灰色部分。
我的姐姐
Mary
12
岁。
string.xml
<string name="my_xml_string">My sister %1$s is %2$d years old.</string>
MyActivity.java
String myString = "Mary";
int myInt = 12;
String formatted = getString(R.string.my_xml_string, myString, myInt);
笔记
- 我可以使用
getString
因为我处于活动状态。 如果不可用,可以使用context.getResources().getString(...)
。 -
String.format()
还将格式化字符串。 -
1$
和2$
术语不需要按此顺序使用。 也就是说,2$
可以先于1$
。 在将应用国际化为使用不同字序的语言时,这很有用。 - 如果要重复,可以在xml中多次使用
%1$s
类的格式说明符。 - 使用
%%
获取实际的%
字符。 - 有关更多详细信息,请阅读以下有用的教程: Android SDK快速提示:格式化资源字符串
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3161620