如何从android XML中的<string-array>资源访问<item>?</string-array> </item>

时间:2012-04-18 08:02:11

标签: android xml

我有一个用于PreferenceActivity的xml文件(/res/xml/setting.xml):

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
        <PreferenceCategory android:title="Main Settings">
            <ListPreference
                android:title="Background Image"
                android:summary="Set the background image"
                android:key="key_background"
                android:entries="@array/background"
                android:entryValues="@array/background_values" 
                android:defaultValue="winter.png" /> 
        </PreferenceCategory>
</PreferenceScreen>

然后我有另一个xml文件“/res/values/string.xml”:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string-array name="background">
        <item>Winter</item>
        <item>Desert</item>
    </string-array>

    <string-array name="background_values">
        <item>winter.png</item>
        <item>desert.png</item>
    </string-array>

</resources>

请参阅setting.xml中的ListPreference,我希望android:defaultValue设置为winter.png。但我也不想在xml中设置硬编码/常量值,所以我尝试使用各种值,例如“@array/background_values/0”,“@array/background_values[0]”等...但都失败了

所以,问题是:

  1. 在其他xml中访问字符串数组资源项的正确语法是什么?
  2. 如何确定android:defaultValue是否有效?
  3. 是否有关于@array语法的文档?我找不到任何。

3 个答案:

答案 0 :(得分:1)

  1. Android Developers无法在XML中对string-array进行资源引用,也不提供其项目。
  2. 您可以清除应用的数据,重新安装并打开应用,转到设置屏幕,然后defaultValue将转到您的共享优先文件。如果defaultValue与其中一个项目匹配,则会选中该项目。
  3. 顺便说一句,您可以更改字符串数组中的项目以引用字符串以避免硬编码。

答案 1 :(得分:0)

使用数组android所需的值的索引:defaultValue =“0”

上面的代码只是因为我在我的字符串数组值中使用数字,这不是因为索引。

答案 2 :(得分:0)

1-为数组定义一个单独的文件(res / values / arrays.xml)

arrays.xml

<?xml version="1.0" encoding="utf-8"?
<resources>
<string-array name="settings_order_by_labels">
    <item>label1</item>
    <item>label2</item>
</string-array>

<string-array name="settings_order_by_values">
    <item>value1</item>
    <item>value2</item>
</string-array>
</resources>

2-在Preference xml文件中使用此数组:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/settings_title">

<ListPreference
    android:defaultValue="value1"
    android:entries="@array/settings_order_by_labels"
    android:entryValues="@array/settings_order_by_values"
    android:key="order_by"
    android:title="Order By" />
</PreferenceScreen>