我可以在string.xml中的字符串资源中使用字符串资源吗?

时间:2011-08-30 15:30:19

标签: android xml string resources

正如标题所说,我的问题是我不知道是否/如何在string.xml中的字符串资源中使用字符串资源。

<string name="projectname">Include Test</string>
<string name="about">@string/projectname is to test if you can use a String Resource in a String Resource</string>

我的问题是,如果有人知道我是否可以写

<string name="identifier">@string/other_identifier</string>

因为Eclispe说

error: Error: No resource found that matches the given name (at 'other_identifier' with value '@string/other_identifier eingeben...').

5 个答案:

答案 0 :(得分:2)

不,我不认为这是可能的。

答案 1 :(得分:2)

最好在运行时构建这些String。在String的帮助下将不同的String.format资源组合在一起。

更多详情:http://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStyling

答案 2 :(得分:1)

编辑:实际上this solution, using custom ENTITY entries更好。


以下内容应该开箱即用:

<string name="identifier">@string/other_identifier</string>

我刚尝试使用API​​ Level 8,它运行正常。另请参阅https://stackoverflow.com/a/6378421/786434

为了能够在其他单词中交叉引用字符串,您可以自己创建一个小帮助方法:

private static Pattern pattern = Pattern.compile("@string/(\\S+)");

public static String getString(Resources res, int stringID) {
String s = res.getString(stringID);

Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
    try {
    final Field f = R.string.class.getDeclaredField(matcher.group(1));
    final int id = f.getInt(null);
    final String replace = res.getString(id);
    s = s.replaceAll(matcher.group(), replace);

    } catch (SecurityException ignore) {
    } catch (NoSuchFieldException ignore) {
    } catch (IllegalArgumentException ignore) {
    } catch (IllegalAccessException ignore) {
    }
}

return s;
}

答案 3 :(得分:0)

在不使用Java代码here的情况下在xml中插入经常使用的字符串(例如app name)的好方法:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE resources [
<!ENTITY appname "MyAppName">
<!ENTITY author "MrGreen">
]>

<resources>
    <string name="app_name">&appname;</string>
    <string name="description">The &appname; app was created by &author;</string>
</resources>

答案 4 :(得分:0)

是的,您可以:)虽然不是本机的,但是您可以使用这个小库,该库允许您在构建时解析这些占位符,因此您无需添加任何Java / Kotlin代码即可使其工作。

根据您的示例,您必须像这样设置字符串:

<string name="projectname">Include Test</string>
<string name="template_about">${projectname} is to test if you can use a String Resource in a String Resource</string>

然后该插件将负责创建以下内容:

<string name="about">Include Test is to test if you can use a String Resource in a String Resource</string>

此处有更多信息:https://github.com/LikeTheSalad/android-string-reference

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