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”。很清楚'+'在这里不起作用,但是还有其他选择来实现这样的字符串连接,这样就可以定义一堆具有公共前缀的字符串资源吗?
我当然意识到我可以在运行时进行这样的资源字符串连接,但是在资源中静态地定义它们会更加优雅和简单。
迈克尔
答案 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>
这些自动生成的字符串将对您对模板和值所做的任何更改保持更新。它们还可以使用本地化和风味字符串。在回购页面上的更多信息。