Android从XML字符串资源动态创建String Array,没有XML字符串数组

时间:2012-01-19 10:16:20

标签: android android-xml

好的,所以这个问题有点奇怪,甚至有点问我,但是因为我可能没有选择,所以我想看看你们的想法。我仍然是Java和Android的新手。

案例如下:我们正在尝试自动构建strings.xml以进行本地化。已经使用解析器将csv文件转换为xml。对于常规字符串,这不是一个真正的问题,这很好。但是构建的解析器不考虑字符串数组,并且很少有人会修改它。

是否有一种“简单”的方法来处理字符串并根据名称属性的部分以编程方式创建字符串数组?

如果没有,那么我将不得不对数组进行硬编码,这使得语言文件的创建者(客户端)无法将项目添加到应该是动态列表的内容中。

我知道手动修改strings.xml可能是一个选项,但是因为我们的管理层希望自动化这样的东西,所以我的选择并不多。

可能我会对这些东西进行硬编码,并说他们无法动态填写列表,但仍然(也是为了我的个人教育)我想知道你们的想法。

感谢您的意见或解决方案。 :)

干杯!

2 个答案:

答案 0 :(得分:3)

你可以在字符串数组中使用(实际上真的真的应该)。假设这是您在瑞典语中生成的res/values/strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="string1">Hej, detta är på svenska</string>
    <string name="string2">Denna strängen också</string>
</resources>

您可以将string-array放入res/values/arrays.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="somearrayname">
        <item>@string/string1</item>
        <item>@string/string1</item>
    </string-array>
</resources>

答案 1 :(得分:3)

所以你会得到 strings.xml ,如下所示

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="string1">1st string</string>
    <string name="string2">2nd string</string>
                 ........
    <string name="stringN">Nth string</string>
</resources>

我建议对strings.xml进行一个简单的修改,即在所有字符串的顶部添加一个名称为count的字符串,其值等于字符串的总数,并添加另一个字符串,其名称前缀低于count,然后它看起来像下方。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="count">4</string>
    <string name="prefix">string</string>
    <string name="string1">1st string</string>
    <string name="string2">2nd string</string>
    <string name="string3">3rd string</string>
    <string name="string4">4th string</string>
</resources>

现在,在您的java文件中,您可以像下面那样访问它们

int count = Integer.parseInt(getString(R.string.count));
        String prefix = getString(R.string.prefix);
        String[] strings = new String[count];
        for (int i = 0; i < count; i++) {
            strings[i] = getString(getResources().getIdentifier(prefix+(i+1), "string", getPackageName()));
        }

我希望它可以帮助你。