2012-12-22 23 views
8

我想要strings.xml文件中存在的字符串列表。獲取Android中的strings.xml文件中存在的字符串列表

有誰知道如何得到它?我發現的一件事是它在R.java內部按順序分配了id,但是如何獲得起始ID尚不清楚。

例如,我在下面的strings.xml中有100個字符串,我想一次讀入,而不是像給個別的getResource()。getString(int id)那樣讀入。

<string name="app_label">Calendar</string> 
<string name="what_label">What</string> 
<string name="where_label">Where</string> 
<string name="when_label">When</string> 
<string name="timezone_label">Time zone</string> 
<string name="attendees_label">Guests</string> 
<string name="today">Today</string> 
<string name="tomorrow">Tomorrow</string> 
+0

你可以通過使用getResources.getString(「your_string_name」); –

+0

我知道,但我想要所有字符串的列表,如果我使用這種方法我必須給所有字符串的ID說如果100字符串在那裏我必須寫這100次 –

+2

請參閱我的答案在這裏http://stackoverflow.com/問題/ 13820645 /比較名稱的每個資源與一個變量的內容的SQLite數據庫/ 13821330#13821330 – Luksprog

回答

5

如果要訪問strings.xml文件中的所有字符串,可以使用R.string類中的反射。一個例子可以在this answer找到,你只需要用字符串替換drawable即可。

+0

由於它的工作! :) –

10

你可以像這樣在res \ values \ strings.xml文件中聲明你的字符串。

<string-array name="vehiclescategory_array"> 

     <item>Cars</item> 
     <item>Bikes</item> 
     <item>RVs</item> 
     <item>Trucks</item> 
     <item>Other Vehicles</item> 

</string-array> 

在您的活動課程中,您可以像下面那樣訪問它們。

String[] categories; 

categories=getResources().getStringArray(R.array.vehiclescategory_array); 

在上面的列表中,無論您聲明的是哪個序列,它的分配方式與您在活動中分配給該數組的方式相同。假設汽車將被分配到類別[0]。希望這可以幫助。

+0

這看起來不錯:)但我的問題是我有字符串定義已經作爲XML文件中的單個元素,我必須閱讀所有這些字符串 –

+0

爲您的參考Appu添加了更多解釋:) –

+0

您需要字符串中的ids嗎?如果是這樣,你有沒有嘗試getIdentifier()?但是我可能不得不說,如果你不使用數組,你需要在活動代碼中提及每個字符串的名字,以獲得相應字符串的id,如果我正確理解了你的話。 – Kanth

2

您可以爲每個字符串聲明一個整數數組。我曾經爲一組顏色做過一次,所以我想它也適用於字符串。

RES /價值/ arrays.xml

<integer-array name="app_strings"> 
    <item>@string/app_label</item> 
    <item>@string/what_label</item> 
    <item>@string/where_label</item> 
    <item>@string/when_label</item> 
    <item>@string/timezone_label</item> 
    <item>@string/attendees_label</item> 
    <item>@string/today</item> 
    <item>@string/tomorrow</item> 
</integer-array> 
在你的代碼

然後,你會循環陣列上,並使用每個值作爲的getString()的參數。

int[] stringIds = getResources().getIntArray(R.array.app_strings); 
String[] strings = new String[stringIds.length]; 
for (int i = 0; i < stringIds.length; i++) { 
    strings[i] = getString(stringIds[i]); 
} 

問題是,當你修改你的字符串資源時,你必須手動更新你的arrays.xml,所以它肯定不理想。

5
Field[] fields = R.string.class.getDeclaredFields(); // or Field[] fields = R.string.class.getFields(); 
String str = ""; 
for (int i =0; i < fields.length; i++) { 
    int resId = getResources().getIdentifier(fields[i].getName(), "string", getPackageName()); 
    str += fields[i].getName() + " = "; 
    if (resId != 0) { 
     str += getResources().getString(resId); 
    } 
    str += "\n"; 
} 

您將獲得字符串的所有代碼及其在「str」變量中的值。

相關問題