8

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

例如:

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

在第三行中:标题是一个字符串,并且在 Strings.xml 中没有任何名为 String 的“标题”我该怎么做?请帮我

4

4 回答 4

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
}
于 2013-05-08T18:29:04.967 回答
3

要从动态键中获取字符串,您可以做的一件事是制作 2 个字符串数组并将它们放入 HashMap 中。

数组.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);
于 2013-05-12T03:39:31.557 回答
1

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

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

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

于 2013-05-08T18:26:22.627 回答
1

这是无法做到的,资源在 R.java 中被转换为唯一的 int,这些用于查找您的实际字符串资源。

R.string.title实际上是这样的0x78E84A34

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

于 2013-05-08T18:26:32.717 回答