可以将android资源字符串组合成新字符串吗?

时间:2010-08-31 22:38:23

标签: android

Android允许创建资源字符串的别名,如:

<resources>
 <string name="foo">somestring</string>
 <string name="bar">@string/foo</string>
</resources>

资源“bar”成为名为“foo”的资源的别名。

我的应用程序可以将现有资源前缀与不同的后缀组合,即将其扩展为:

<resources>
 <string name="foo">foo</string>
 <string name="bar">@string/foo+bar</string> 
 <string name="else">@string/foo+else</string> 
</resources>

其中资源“bar”将产生字符串“foobar”。很清楚'+'在这里不起作用,但是还有其他选择来实现这样的字符串连接,这样就可以定义一堆具有公共前缀的字符串资源吗?

我当然意识到我可以在运行时进行这样的资源字符串连接,但是在资源中静态地定义它们会更加优雅和简单。

迈克尔

2 个答案:

答案 0 :(得分:15)

不,这是不可能的。 你可以使用<string name="bar">This is my %s</string> 然后在您的应用中使用String.format()来填充变量,例如

getResources().getString(R.string.foo);

答案 1 :(得分:1)

我知道已经很晚了,但是无论如何现在您都可以使用我创建的以下库来完成此操作:https://github.com/LikeTheSalad/android-string-reference

它将在构建时合并所有想要的字符串,并将生成新的字符串,您可以在项目中的任何地方使用它,就像其他任何手动添加的字符串一样。

对于您的情况,您必须像这样定义字符串:

<resources>
 <string name="foo">foo</string>
 <string name="template_bar">${foo} bar</string> 
 <string name="template_else">${foo} else</string> 
</resources>

然后,在构建项目后,您将获得:

<resources>
 <string name="bar">foo bar</string> 
 <string name="else">foo else</string> 
</resources>

这些自动生成的字符串将对您对模板和值所做的任何更改保持更新。它们还可以使用本地化和风味字符串。在回购页面上的更多信息。