我可以在string.xml中使用一个String Resource作为另一个String Resource吗?

6 浏览
0 Comments

我可以在string.xml中使用一个String Resource作为另一个String Resource吗?

问题是我不知道如何在string.xml中使用String Resource作为String Resource。我的问题是有没有人知道我是否可以写成如下形式:@string/other_identifier,因为Eclipse显示错误信息:“找不到与给定名称匹配的资源(位于'other_identifier'处,值为'@string/other_identifier')。

0
0 Comments

在string.xml文件中,不支持在一个字符串资源中使用另一个字符串资源。虽然这样的功能可能会非常有用,但目前还不支持。

然而,我们可以通过编程的方式来实现类似的效果。我们可以在代码中获取字符串资源,并将其与其他字符串资源拼接起来。下面是一个示例代码:

String string1 = getResources().getString(R.string.string1);
String string2 = getResources().getString(R.string.string2);
String combinedString = string1 + " " + string2;

在这个例子中,我们首先获取了两个字符串资源的值,然后通过加号操作符将它们拼接起来。这样,我们就可以在代码中使用组合后的字符串。

希望这个功能能够很快地被添加进来,这样我们就能够更方便地在字符串资源中使用其他字符串资源了。

0
0 Comments

问题的原因是希望在string.xml文件中使用一个字符串资源作为另一个字符串资源的值,但是直接使用资源ID并不能实现这个功能。

解决方法是创建一个辅助方法,该方法接受一个资源对象和一个字符串资源的ID作为参数,并返回处理后的字符串。该方法使用正则表达式匹配字符串中的"/"和后面的字符串,并通过反射获取对应的资源ID,然后替换字符串中的匹配项。最后返回处理后的字符串。

具体代码如下:

private static Pattern pattern = Pattern.compile("/(\\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;
}

通过调用上述方法,可以实现在string.xml文件中使用一个字符串资源作为另一个字符串资源的值的功能。

0
0 Comments

问题的出现原因:

在开发Android应用时,通常会使用字符串资源(String Resource)来存储应用中的文本信息。这样做的好处是可以方便地进行国际化和本地化,同时也方便了后续对文本信息的修改和维护。然而,有时候我们希望在一个字符串资源中使用另一个字符串资源,以便动态地构建更复杂的文本信息。但是,直接在字符串资源中嵌套使用其他字符串资源会导致编译错误。

问题的解决方法:

为了解决这个问题,我们可以在运行时构造字符串。可以使用String.format方法将不同的字符串资源组合在一起。具体的用法可以参考Android开发文档中的相关说明。

以上是对问题出现原因和解决方法的整理。希望对您有所帮助!

0