【问题标题】:Why getResources().getStringArray(R.array.***); method doesn't work, when I move the *.xml file to different folder than res/values为什么 getResources().getStringArray(R.array.***);方法不起作用,当我将 *.xml 文件移动到与 res/values 不同的文件夹时
【发布时间】:2019-12-13 10:33:21
【问题描述】:

我有一个特殊的问题。 我在 xml 文件中有一个数组:

res/values/difficulties.xml

<?xml version="1.0" encoding="utf-8"?>

<resources>
    <string-array name="difficulty_names">
        <item> @string/easy </item>
        <item> @string/medium </item>
        <item> @string/hard </item>
        <item> @string/insane </item>
        <item> @string/preposterous </item>
        <item> @string/ludicrous </item>
    </string-array>
</resources>

对于这个数组的初始化,我使用了这个方法:

String[] difficultiesNamesArray = getResources().getStringArray(R.array.difficulty_names); 

这非常有效。直到我将此文件移动到不同的文件夹中。从那时起,这种方法就停止了工作。新路径是:

res/arrays/difficulties.xml

我想知道,如何本地化这个文件并在这个重新定位的 xml 文件上再次使用 getStringArray() 方法。

或者甚至可以使用 getResources().getStringArray(R.array.***) 方法。如果没有,我如何从这个不同的路径读取数组。 我的猜测是,它需要实现 XMLParser。但是我不知道如何使用这个简单的数组。

developer.android.com我找到了这个信息:

字符串资源

  • 定义字符串、字符串数组和复数形式(包括字符串格式和样式)。保存在 res/values/ 并从
    R.stringR.arrayR.plurals 类。

所以我认为这与我的问题有关,即我不能对位于不同路径的文件使用 getStringArray() 方法,然后 res/values/。 但这只是我的预感。我不知道。

我说的对吗?可以从不同的路径读取 array.xml 吗?如果是怎么办?

【问题讨论】:

  • 一般来说,你不能发明新的资源目录(例如,res/array/)。
  • 谢谢回复。我从 Eldhose 答案中选择了重命名解决方案。将 *xml 文件重命名为 res/values/arrays_difficulties.xml 这听起来是最简洁的方式。

标签: java android arrays xml path


【解决方案1】:

res/values/ 是系统保留文件夹。因此,当您在该文件夹中添加数组、字符串等时,将根据您添加的值的类型生成一个 android Resource ("R") 类。因此,如果您使用不同的文件夹结构,则不会生成相同的“R”类值。

您可以参考here 了解更多关于正在生成的“R”类

如果您想在您自己的文件夹结构中维护您的值,那么您可能需要将它放在您想要的任何文件夹结构中的“资产”文件夹中。然后访问它,你需要自己解析xml,这是高度不推荐

您可以参考以下link 了解如何从 assets 文件夹中读取文件。

我的建议是以类似于文件夹结构的方式命名您的字符串文件。在您的情况下,请考虑命名为 res/values/arrays_difficulties.xml

【讨论】:

  • 啊哈,现在我明白了。谢谢你的回答埃尔德霍斯。我已阅读您提供的链接。所以我现在比以前更好地理解了资源和 R.java 的这个话题。对于这种简单的arraylist,BufferedReader 是不必要的。我选择了重命名解决方案为 res/values/arrays_difficulties.xml 这听起来最干净。
猜你喜欢
  • 2019-07-11
  • 2020-01-13
  • 1970-01-01
  • 2017-09-29
  • 2017-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多