正如标题所说,我的问题是我不知道是否/如何在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...').
答案 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
免责声明:我是该图书馆的作者。