1

刚开始涉足Android,并被告知不应将字符串硬编码为Java,而应将其放入字符串资源文件夹中。

我有现有代码,其中在哈希图中键和值都是字符串。我将如何将字符串放入 xml 并将它们完全从 java 部分中取出?

我应该像这样在字符串资源文件夹中创建一个字符串吗

<string name="hello">Hello.world</string>

hello 是键,world 是值,然后使用 . 解析字符串。作为分隔符?

希望我已经正确解释了自己

4

4 回答 4

3

您可以在 res 文件夹中定义许多其他资源类型。您可以在此处此处查看可用的。出于您的目的,一种方法可能是在 res/values/arrays.xml 中定义一个数组:

<resources> 
    <string-array name="hashmap"> 
        <item>key1</item> 
        <item>value1</item> 
        <item>key2</item> 
        <item>value2</item> 
        <item>key3</item> 
        <item>value3</item> 
    </string-array> 
</resources> 

并在代码中:

Resources res = this.getResources();
String[] hashmapData = res.getStringArray(R.array.hashmap);
HashMap<String, String> map = new HashMap<String, String>(); 
for(int i=0; i<hashmapData.length; i=i+2) { 
    map.put(hashmapData[i], hashmapData[i+1]);         
} 
于 2012-10-23T14:30:00.210 回答
1

这真的取决于你用它做什么。“仅在 XML 中包含字符串”的教条很棒,但它确实适用于您用于用户输出的字符串,因此如果您想翻译应用程序,可以轻松更改它们。如果您将键/值对用于内部工作,则无需这样做。

如果它确实涉及输出字符串,那么是的,这将是一个很好的方法。您还可以考虑将键和值拆分到两个 XML 节点上——这实际上取决于您对它们进行的操作。

但总的来说,是的,就是这样。

于 2012-10-23T14:21:14.677 回答
0

正确的。您不应该将字符串硬编码到您的应用程序中。这样做的原因是您可以非常轻松地在您的应用程序中支持本地化(多种语言)。您的字符串应该全部输入/res/values/strings.xml,然后如果您想支持西班牙语,这些字符串(具有相同的name=值)将输入/res/values-es/strings.xml. 然后要在 xml 中访问这些字符串,您只需使用@string/hello和在 java 中使用getString(R.string.hello). 您可以在以下链接中找到更多信息:

于 2012-10-23T14:22:44.340 回答
0

你真的有三个选项,因为没有对键/值对的官方支持

  1. 您已经使用了这种方法,但首先我建议使用字符串数组而不是字符串。这样,您可以将哈希图保存在一个地方。我建议使用随机 unicode 值而不是句号,因为这样可以降低拆分字符串时的风险。

  2. 有 2 个字符串数组。第一个数组包含它们的键,第二个数组包含值。通常使用这种方法,但您必须担心耦合/确保任何编辑都反映在两个字符串数组上。

  3. 这个建立在数字 2 上。你有一个键/值对的字符串数组,然后是一个包含数组的数组。您使用gainTypedArray()获取“hashmap” ,然后在 for 循环或其他内容中,使用 TypedArray.getTextArray() 返回单个 String 数组。这允许键和值的耦合。

    <string-array name="hello_world"> <item>Hello</item> <item>世界</item> </string-array>

    <array name="hashmap"> <item>@array/hello_world</item> </array

(请忽略可怕的格式,stackoverflow 似乎不太适合 xml)

于 2012-10-23T14:30:55.867 回答