2012-04-18 62 views
5

我有PreferenceActivity一個XML文件(/res/xml/setting.xml):如何在android XML中從<string-array>資源訪問<item>?

<?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字符串accesing陣列資源的項目的正確語法?
  2. 如何確定android:defaultValue是否正常工作?
  3. 是否有關於@array語法的任何文檔?我找不到任何東西。

回答

0

使用你從你的陣列的Android所需的值的指數:默認值=「0」

以上代碼的工作,只是因爲我用在我的字符串數組值的數字,這是不是因爲的索引。

+0

嗨,你知道如何測試如果android:defaultValue工作嗎? – null 2012-04-18 08:45:02

+0

您可能想要清除應用程序的「清除數據」以將首選項重置爲默認值。您可以在電話設置中執行此操作。 (如果可以幫助你的話,請不要忘記加註和/或標記爲答案) – julian 2012-04-18 09:19:31

+0

嘗試選擇除默認值以外的其他值。然後轉到設置並清除您的應用的數據。下次打開應用程序時,它必須顯示默認值。 – julian 2012-04-18 09:22:12

1
  1. Android Developers在XML中沒有辦法將資源引用到string-array,而不是提及其項目。
  2. 你可以清除你的應用程序的數據,重新安裝並打開你的應用程序,進入你的設置屏幕,然後defaultValue將去你的共享prefereces文件。如果defaultValue與其中一個項目相匹配,則會被選中。

順便說一句,你可以改變你的項目在字符串數組引用字符串,以避免硬編碼。

+1

**對字符串**的引用不是硬編碼值,爲什麼不使用它? – 2012-04-19 04:27:25

+1

我明白了,所以我可以爲winter.jpg創建一個資源(let'say我給它id = default_background),並將background_values中的winter.jpg 更改爲@ string/default_background。我發現它有點不直觀,但我想這是在xml中輸入winter.jpg一次的唯一方法。 – null 2012-04-19 06:47:16

0

1-定義陣列一個單獨的文件(RES /值/ 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-使用此陣列在偏好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>