首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否可以在strings.xml中为运行时值使用占位符?

是否可以在strings.xml中为运行时值使用占位符?
EN

Stack Overflow用户
提问于 2010-09-07 14:55:03
回答 14查看 313.3K关注 0票数 575

是否可以在string.xml中的字符串值中使用占位符,以便在运行时为其赋值?

示例:

some string PLACEHOLDER1 some

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 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有一个重载,它使用字符串作为格式字符串:

代码语言:javascript
复制
String text = res.getString(R.string.welcome_messages, username, mailCount);

复数

如果您需要处理复数,请使用以下命令:

代码语言:javascript
复制
<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参数用于决定使用哪种格式(单数或复数),其他参数是您的替换:

代码语言:javascript
复制
Resources res = getResources();
String text = res.getQuantityString(R.plurals.welcome_messages, mailCount, username, mailCount);

有关更多详细信息,请参阅String Resources: Plurals

票数 1.2K
EN

Stack Overflow用户

发布于 2016-11-21 16:04:29

#补充答案

当我第一次在被接受的答案中看到%1$s%2$d时,它没有任何意义。这里有更多的解释。

它们被称为格式说明符。在xml字符串中,它们的形式为

代码语言:javascript
复制
%[parameter_index$][format_type] 

  • %:百分号标记格式说明符的开始。

  • parameter索引:这是一个后面跟着美元符号的数字。如果您有三个想要插入到字符串中的参数,那么它们将分别称为1$2$3$。将它们放在资源字符串中的顺序并不重要,重要的是提供参数的顺序。

  • format类型:有很多方法可以格式化对象(see the documentation)。下面是一些常见的代码:

  • s string

  • d十进制整数

  • f浮点数

#示例

我们将以编程方式在灰色部分插入的位置创建以下格式化字符串。

我的姐姐

Mary今年12岁。

string.xml

代码语言:javascript
复制
<string name="my_xml_string">My sister %1$s is %2$d years old.</string>

MyActivity.java

代码语言:javascript
复制
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
票数 340
EN

Stack Overflow用户

发布于 2014-07-23 14:12:44

当您想使用实际strings.xml文件中的参数而不使用任何Java代码时:

代码语言:javascript
复制
<?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文件中。

票数 134
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3656371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档