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

mmo*_*mmo 11 android

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

<resources>
 <string name="foo">somestring</string>
 <string name="bar">@string/foo</string>
</resources>
Run Code Online (Sandbox Code Playgroud)

资源"bar"成为名为"foo"的资源的别名.

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

<resources>
 <string name="foo">foo</string>
 <string name="bar">@string/foo+bar</string> 
 <string name="else">@string/foo+else</string> 
</resources>
Run Code Online (Sandbox Code Playgroud)

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

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

迈克尔

Mat*_*adt 15

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

getResources().getString(R.string.foo);
Run Code Online (Sandbox Code Playgroud)

  • 将这 2 个组合得到的字符串将是 `String.format(getResources().getString(R.string.bar), getResources().getString(R.string.foo))` (2认同)

Cés*_*ñoz 7

我知道已经晚了,但无论如何现在你可以使用我创建的这个库来做到这一点: https: //github.com/LikeTheSalad/android-stem

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

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

<resources>
 <string name="foo">foo</string>
 <string name="bar">${foo} bar</string> 
 <string name="else">${foo} else</string> 
</resources>
Run Code Online (Sandbox Code Playgroud)

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

<!-- Auto generated during compilation -->
<resources>
 <string name="bar">foo bar</string> 
 <string name="else">foo else</string> 
</resources>
Run Code Online (Sandbox Code Playgroud)

这些自动生成的字符串将根据您对模板和值所做的任何更改不断更新。它们还可以使用本地化字符串和风味字符串。有关存储库页面的更多信息。