Android динамически создает String Array из строковых ресурсов XML, без строкового массива XML - PullRequest
1 голос
/ 19 января 2012

Хорошо, так что этот вопрос немного странный, и мне кажется, что я даже неправильно задаю вопрос, но, поскольку у меня, вероятно, нет выбора, я хочу посмотреть, что вы, ребята, думаете.Я все еще новичок в Java и Android.

Дело в следующем: мы пытаемся автоматизировать сборку нашего strings.xml для локализации.Создан парсер для преобразования csv-файла в xml.Для обычных строк это не настоящая проблема, которая отлично работает.Но созданный синтаксический анализатор не учитывает строковые массивы, и маловероятно, что кто-то изменит его.

Существует ли "простой" способ работы со строками и создания строкового массива программным способом?на основе частей имя атрибута?

Если нет, то мне придется жестко кодировать массивы, и создатель (клиент) языковых файлов не сможет добавлять элементы в нечто, что должно быть динамическим списком.

IЯ знаю, что изменение strings.xml вручную может быть вариантом, но поскольку наше руководство хочет автоматизировать подобные вещи, у меня нет особого выбора.

Возможно, я жестко закодирую материал и скажу, что они могут 't динамически заполнять списки, но все же (также для моего личного образования) я хочу знать, что вы, ребята, думаете.

Спасибо за ваше мнение или решения.:)

Ура!

Ответы [ 2 ]

3 голосов
/ 20 января 2012

Таким образом, вы получите 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, которая заключается в добавлении строки с числом имен в верхней части всех строк.со значением, равным общему количеству строк, и добавьте еще одну строку с префиксом имени ниже счетчика, тогда это будет выглядеть так, как показано ниже.

<?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()));
        }

Надеюсь, это поможет вам.

3 голосов
/ 19 января 2012

Вы можете использовать (и действительно действительно действительно следует в любом случае) ссылки в строковых массивах.Предполагая, что это ваш сгенерированный 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>
...