通过变量从Strings.xml获取字符串

时间:2013-05-08 18:22:32

标签: android

我想从strings.xml中获取一个字符串。我知道怎么做但我的问题是别的: 我有一个每次更改的字符串变量,每次更改时,我想查看strings.xml并检查Strings.xml中是否存在该String变量,然后获取文本。

例如:

String title="sample title" \\ which changes
String city= "sample city"
String s = getResources().getString(R.string.title);

在第三行:title是一个String,并且在Strings.xml中没有任何名为String的“title” 我怎样才能做到这一点?请帮帮我

4 个答案:

答案 0 :(得分:11)

据我所知,您可以使用public int getIdentifier (String name, String defType, String defPackage)。但是,它的使用是不鼓励的。

要使用它(我还没有这样做,但我曾经读过这个方法)你可能需要:

int identifier = getResources().getIdentifier ("title","string","your.package.name.here");
if (identifier!=0){
     s=getResources().getString(identifier);
}
else{
    s="";//or null or whatever
}

答案 1 :(得分:3)

从动态键获取字符串可以做的一件事就是创建2个字符串数组并将它们放在HashMap中。

arrays.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="title_keys">
        <item>title1</item>
        <item>title2</item>
        <item>title3</item>
    </string-array>
    <string-array name="title_values">
        <item>Real Title 1</item>
        <item>Real Title 2</item>
        <item>Real Title 3</item>
    </string-array>
</resources>

在您的代码中:

String[] titleKeys = getResources().getStringArray(R.array.title_keys);
String[] titleValues = getResources().getStringArray(R.array.title_values);

HashMap<String, String> titles = new HashMap<String, String>();

for(int i = 0; i < titleKeys.length; i++) {
    titles.put(titleKeys[i], titleValues[i]);
}

最后,要从动态密钥中获取标题:

titles.get(titleFromSomewhere);

答案 2 :(得分:1)

你不会。您将strings.xml用于常量字符串。你想做的是两件事之一。

1)您希望String保持不变,但需要一些选项(例如,国家/地区列表中的一个项目)。在这种情况下,将所有选项放在strings.xml中,并在int中保存当前使用的那个选项。当您需要获取实际字符串时,请使用getString()。

2)它实际上可以是任何字符串(例如,用户输入的名称)。在这种情况下,它根本不在strings.xml中,你只需使用一个String变量。

答案 3 :(得分:0)

无法完成,资源在R.java中转换为唯一的int,并且这些资源用于查找实际的字符串资源。

所以R.string.title实际上就像0x78E84A34

您可以使用HashMap<String,String>编写自己的管理字符串的类,以便为较短的“键”字符串查找完整字符串。