例如,我有 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 name或this之类的东西。但我需要以编程方式动态获取它,例如,HashMap<String, String>
或者所有字符串资源在构建后将合并在一起,并且无法将其分开?
答案 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;有点......你总是可以使用context
和R.string
引用来获取字符串。我假设您已经意识到这一点,那么您必须尝试创建一个简化的引用吗?
创建HashMap
需要静态引用(不适用于XML)或运行时创建列表。您可以在Application
课程中创建列表,但我会提醒您。您可能无法引用context
,但您可以再次使用Application
构造函数来确保您具有对上下文的引用。
除此之外,您应该检查StringArray
资源。它不允许您使用另一个字符串引用字符串,因为它是一个数组。以下是文档:
http://developer.android.com/guide/topics/resources/string-resource.html#StringArray
如果使用HashMap
非常重要,那么您可能不应该使用XML,而应该只创建一个static
类。 XML资源文件主要用于集中数据(以便于修改静态字符串),更多的是用于多语言目的。静态HashMap
不是正确的用例。