Можно ли записывать литералы строкового массива в файлы ресурсов Android XML? - PullRequest
1 голос
/ 07 января 2012

Для моей PreferenceActivity я использую типичный файл Preferences.xml.

Параметр entryValues ​​для ListPreference не предназначен для локализации.Можно ли определить атрибут entryValues ​​напрямую, используя какой-нибудь литерал массива?

Моя первая попытка ниже не будет работать, "pull, push" считается строкой:

<ListPreference
        android:key="server_reception_mode"
        android:title="@string/title_server_reception_mode_preference"
        android:entries="@array/entries_server_reception_mode_preference"
        android:entryValues="pull, push" />

Ответы [ 3 ]

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

Вы можете объявить массив <string-array> строк. Например:

<string-array name="entry_values">
    <item>pull</item>
    <item>push</item>
</string-array>

Затем вы можете использовать его в XML:

<ListPreference
    android:key="server_reception_mode"
    android:title="@string/title_server_reception_mode_preference"
    android:entries="@array/entries_server_reception_mode_preference"
    android:entryValues="@array/entry_values" />

Если все, что вы ищете, избегает перевода, вы можете использовать соглашение, используемое в источниках Android : у них есть файлы ресурсов с именами values/donottranslate.xml, values/donottranslate-names.xml и т. Д.

1 голос
/ 07 января 2012

Просмотр документации для атрибута entryValues, нет:

Должна быть ссылкой на другой ресурс [...]

Конечно, если у вас есть строковый ресурс, это не означает, что у вас есть для его локализации.

0 голосов
/ 07 января 2012

Вам нужно будет создать массив в ваших ресурсах. Вы не можете объявить это напрямую, как надеялись.

Для таких массивов я обычно создаю второй XML-файл со всеми записями, которые не нужно переводить (например, array-notranslate.xml). Таким образом, если вы передадите свои xml-файлы кому-то для перевода, им не придется иметь с этим дело.

...