获取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>
如果要访问strings.xml
文件中的所有字符串,可以使用R.string
类中的反射。一个例子可以在this answer找到,你只需要用字符串替换drawable即可。
由于它的工作! :) –
你可以像这样在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]。希望这可以帮助。
这看起来不错:)但我的问题是我有字符串定义已经作为XML文件中的单个元素,我必须阅读所有这些字符串 –
为您的参考Appu添加了更多解释:) –
您需要字符串中的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”变量中的值。
你可以通过使用getResources.getString(“your_string_name”); –
我知道,但我想要所有字符串的列表,如果我使用这种方法我必须给所有字符串的ID说如果100字符串在那里我必须写这100次 –
请参阅我的答案在这里http://stackoverflow.com/问题/ 13820645 /比较名称的每个资源与一个变量的内容的SQLite数据库/ 13821330#13821330 – Luksprog