获取Android中的strings.xml文件中存在的字符串列表

问题描述:

我想要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

如果要访问strings.xml文件中的所有字符串,可以使用R.string类中的反射。一个例子可以在this answer找到,你只需要用字符串替换drawable即可。

+0

由于它的工作! :) –

你可以像这样在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

您可以为每个字符串声明一个整数数组。我曾经为一组颜色做过一次,所以我想它也适用于字符串。

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,所以它肯定不理想。

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”变量中的值。