Android从特殊文件获取字符串资源列表

时间:2014-12-24 10:47:06

标签: android android-resources

例如,我有 my_string.xml 文件,其中包含字符串:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="my_string">My string</string>
    <string name="another_string">Another string</string>
    {...}
</resources>

是否可以通过编程方式将此字符串设置为list / hashmap?是的,我知道我可以接受by namethis之类的东西。但我需要以编程方式动态获取它,例如,HashMap<String, String>

或者所有字符串资源在构建后将合并在一起,并且无法将其分开?

3 个答案:

答案 0 :(得分:1)

将文件放在raw文件夹中。然后你必须打开文件

InputStream in = getResources().openRawResource(R.raw.yourfile);

并手动解析内容,例如将列表保存为xml或json并解析它并构建所需的HashMap或任何您喜欢的内容。请记住,这可能是一个阻塞操作,不应该在主UI线程上运行,运行异步,但它取决于您尝试解析的文件的长度,但通常您应该在异步线程中运行它/ p>

----更新 你可以这样做:

int stringRes[] = {R.string.my_string, R.string.another_string}
List<String> myStrings = new ArrayList<String>();
for (int id : stringRes){

   String str = getResources().getString(id);
   // TODO do some if check if you want to keep that string or whatever you want to ...
   myStrings.add(str);
}

您可以将它们存储到HashMap中(但getResources()。getString()的行为已经像HashMap)或List

答案 1 :(得分:0)

如果要访问strings.xml文件中的所有字符串,可以使用R.string类的反射。

Field[] fields = R.strings.class.getFields();
String[] allStringsNames = new String[fields.length];
for (int  i =0; i < fields.length; i++) {           
    allStringsNames[i] = fields[i].getName();
}

然后,您可以将它们存储在Hashmap或任何您想要的地方

答案 2 :(得分:0)

XML文件的重点是充当&#34; hashmap&#34;有点......你总是可以使用contextR.string引用来获取字符串。我假设您已经意识到这一点,那么您必须尝试创建一个简化的引用吗?

创建HashMap需要静态引用(不适用于XML)或运行时创建列表。您可以在Application课程中创建列表,但我会提醒您。您可能无法引用context,但您可以再次使用Application构造函数来确保您具有对上下文的引用。

除此之外,您应该检查StringArray资源。它不允许您使用另一个字符串引用字符串,因为它是一个数组。以下是文档:

http://developer.android.com/guide/topics/resources/string-resource.html#StringArray

如果使用HashMap非常重要,那么您可能不应该使用XML,而应该只创建一个static类。 XML资源文件主要用于集中数据(以便于修改静态字符串),更多的是用于多语言目的。静态HashMap不是正确的用例。