我想从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” 我怎样才能做到这一点?请帮帮我
答案 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>
编写自己的管理字符串的类,以便为较短的“键”字符串查找完整字符串。