13

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

有谁知道怎么获取???我发现的一件事是它在 R.java 中按顺序分配 id,但如何获取起始 id 尚不清楚。

例如,我的 strings.xml 中有 100 个字符串,如下所示,我想一次读取,而不是为个人提供 getResources().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>
4

5 回答 5

13

您可以像这样在 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);

在上面的列表中,无论您声明什么序列,都与它在活动中分配给数组的方式相同。假设 Cars 将被分配到类别 [0]。希望这可以帮助。

于 2012-12-22T07:18:50.730 回答
10
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”变量中获得所有字符串代码及其值。

于 2014-08-24T09:08:22.307 回答
7

如果要访问strings.xml文件中的所有字符串,可以对R.string类使用反射。可以在此答案中找到一个示例,您只需将可绘制对象替换为字符串。

于 2012-12-22T08:23:12.867 回答
3

您可以声明一个整数数组,其中每个字符串都有一个条目。我曾经为一组颜色做过这个,所以我想它也适用于字符串。

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

于 2012-12-22T08:12:53.353 回答
1
String[] categories = getResources().getStringArray(R.array.stars_array);
        List<String> stringList = new ArrayList<>(Arrays.asList(categories));

使用这个简单的

于 2018-04-29T04:39:32.897 回答