获取Android中strings.xml文件中的string列表

我想要strings.xml文件中存在的string列表。

有谁知道如何得到它? 我发现的一件事是它在R.java内部按顺序分配ID,但是如何获得起始ID尚不清楚。

例如,我在下面的strings.xml中有100个string,我想在不同的时候读入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> 

Solutions Collecting From Web of "获取Android中strings.xml文件中的string列表"

如果你想从strings.xml文件中访问所有的string,你可以在R.string类中使用reflection。 在这个答案中可以find一个例子,你只需要用stringreplacedrawable即可。

你可以像这样在res \ values \ strings.xml文件中声明你的string。

  <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]。 希望这可以帮助。

 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"; } 

你将得到所有string的代码,其值在“str”variables中。

你可以声明一个整数数组,每个string都有一个条目。 我做了一次颜色数组,所以我想它也适用于string。

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]); } 

问题是,当你修改你的string资源时,你必须手动更新你的arrays.xml,所以它肯定是不理想的。