是否可以在string.xml
中的字符串值中使用占位符,以便在运行时为其赋值?
示例:
some string PLACEHOLDER1 some
发布于 2010-09-07 15:01:34
格式化和样式设置
可以,请从String Resources: Formatting and Styling查看以下内容
如果需要使用
String.format(String, Object...)
格式化字符串,则可以通过将格式参数放入字符串资源中来实现。例如,使用以下资源:
您好,%1$s!您有%2$d封新邮件。
在本例中,格式字符串有两个参数:%1$s
是一个字符串,%2$d
是一个十进制数。您可以使用应用程序中的参数设置字符串的格式,如下所示:
资源res =用户名();字符串文本= String.format(res.getString(R.string.welcome_messages),用户名,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);
有关更多详细信息,请参阅String Resources: Plurals。
发布于 2016-11-21 16:04:29
#补充答案
当我第一次在被接受的答案中看到%1$s
和%2$d
时,它没有任何意义。这里有更多的解释。
它们被称为格式说明符。在xml字符串中,它们的形式为
%[parameter_index$][format_type]
1$
、2$
和3$
。将它们放在资源字符串中的顺序并不重要,重要的是提供参数的顺序。s
stringd
十进制整数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(...)
,如果不是,available.String.format()
也会格式化一个字符串。1$
和2$
术语不需要按这个顺序使用。也就是说,2$
可以先于1$
。在为使用不同单词顺序的语言国际化应用程序时,这很有用。如果您想重复更多详细信息,请阅读以下有用的教程:Android SDK Quick Tip: Formatting Resource Strings。
%1$s
发布于 2014-07-23 14:12:44
当您想使用实际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文件中。
https://stackoverflow.com/questions/3656371
复制相似问题