string.xml中的Android引用字符串

时间:2012-04-12 10:29:42

标签: android android-layout

是否可以在strings.xml中引用字符串

例如:

<string name="application_name">@string/first_name Browser</string>
<string name="first_name">Chrome</string>

根据要求,我可以将first_name的值切换为“Chrome”,“Firefox”或“Opera”。

3 个答案:

答案 0 :(得分:17)

您可以提供字符串资源的参考,但限制如下

<string name="first_name">Chrome</string>
<string name="application_name">@string/first_name</string> // gives "Chrome"
<string name="application_name">Chrome @string/first_name</string> // gives "Chrome @string/first_name"
<string name="application_name">@string/first_name Chrome </string> // gives error

如果内容以“@”开头,那么Android会认为这是一个引用的字符串,请参阅最后一种情况,因为Android的工具将@及其下一个字符串作为字符串的引用名称,它将尝试查找资源称为“@ string / first_name Chrome”,它不存在。

您可以使用字符串格式动态分配像<string name="application_name">%1$s browser</string>

这样的子字符串

使用

String text = String.format(res.getString(R.string.application_name), "Chrome");

答案 1 :(得分:2)

strings.xml中的字符串是固定的,无法在运行时更改。您必须为每种情况定义一个字符串,并在代码中进行切换。

String name;

if (/* browser is Chrome*/) {
    name = getString(R.string.first_name_chrome);
} else if (/* browser is Firefox */) {
    name = getString(R.string.first_name_firefox);
}

但是,您可以让应用程序自动为不同的语言选择正确的字符串。这可以通过将字符串文件放在本地化文件夹(values-en,values-fr,values-pl等)中来完成。

您可以在http://www.icanlocalize.com/site/tutorials/android-application-localization-tutorial/

了解有关本地化的更多信息

答案 2 :(得分:0)

是的,您可以使用此小型库来执行此操作,而不必添加任何Java / Kotlin代码,该库仅允许您在构建时使用XML。因此,对于您的情况,您必须像这样设置字符串:

<string name="template_application_name">${first_name} Browser</string>
<string name="first_name">Chrome</string>

然后运行gradle插件后,您将获得以下信息:

<string name="application_name">Chrome Browser</string>

这是到库的链接:https://github.com/LikeTheSalad/android-string-reference

免责声明:我是这个图书馆的作者。