我具有用于选择语言的ListPreference。如图中所示,当前的声音定义在它们自己的strings.xml中。为了填充首选项列表,我将string-array元素包括在主要的strings.xml中,使其成为静态配置。
问题:是否有办法通过遍历所有strings.xml并从它们中提取语言环境信息(在运行时如何运行)来使Language ListPreference动态化?
这是当前的静态设置:
values / strings / strings.xml
<resources>
<!-- Preferences -->
<string name="pref_language">Language</string>
<string-array name="pref_language_list">
<item>English</item>
<item>Svenska</item>
<item>Deutsch</item>
<item>Français</item>
<item>Português</item>
<item>Español</item>
<item>Pусский</item>
</string-array>
<string-array name="pref_language_values">
<item>en</item>
<item>se</item>
<item>de</item>
<item>fr</item>
<item>pt</item>
<item>es</item>
<item>ba</item>
</string-array>
</resources>
xml / pref_general.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<ListPreference
android:entries="@array/pref_language_list"
android:entryValues="@array/pref_language_values"
android:key="language"
android:title="@string/pref_language"
android:icon="@drawable/language"
/>
</PreferenceScreen>
答案 0 :(得分:1)
entries
和entryValues
应该可以工作。
虽然我不理解这些无用的字符串定义和字符串分配...
将它们直接添加到数组中;进入values/arrays.xml
;具有属性translatable="false"
。
并且这些语言标签也与资源文件的位置不匹配。
<resources>
<string-array name="pref_language_list" translatable="false">
<item>English</item>
<item>Svenska</item>
<item>Deutsch</item>
<item>Français</item>
<item>Português</item>
<item>Español</item>
<item>Pусский</item>
</string-array>
<string-array name="pref_language_values" translatable="false">
<item>en</item>
<item>se-rSE</item>
<item>de-rDE</item>
<item>fr-rFR</item>
<item>pt-rPT</item>
<item>es-rES</item>
<item>ba-rRU</item>
</string-array>
</resources>