Brijesh Masrani
Brijesh Masrani

Reputation: 1449

get list of the strings present in strings.xml file in Android

I want the list of strings present in the strings.xml file.

Does anyone knows how to get it??? One thing I found is it assigns the ids in sequential order inside R.java but how to get the starting id is not clear.

For Example I have 100 Strings in my strings.xml like below and I want to read in at a time not like giving getResources().getString(int id) for individual.

<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>

Upvotes: 13

Views: 16240

Answers (5)

user9260670
user9260670

Reputation:

String[] categories = getResources().getStringArray(R.array.stars_array);
        List<String> stringList = new ArrayList<>(Arrays.asList(categories));

use this simple one

Upvotes: 1

Miki
Miki

Reputation: 450

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

You will get all codes of strings with its values in "str" variable.

Upvotes: 10

user
user

Reputation: 87064

If you want to access all the Strings from the strings.xml file you could use reflection on the R.string class. An example can be found in this answer, you'll just need to replace drawables with strings.

Upvotes: 8

Karakuri
Karakuri

Reputation: 38585

You could declare an integer array with an entry for each string. I did this for an array of colors once, so I imagine it works for strings as well.

res/values/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>

Then in your code, you would loop over the array and use each value as the argument for 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]);
}

The problem is you have to manually update your arrays.xml whenever you modify your string resources, so it's certainly not ideal.

Upvotes: 3

Kanth
Kanth

Reputation: 6751

You can declare your strings in res\values\strings.xml file like this.

 <string-array name="vehiclescategory_array">

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

 </string-array>

In your activity class, you can access them like the following.

String[] categories;

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

In the above list, whatever sequence you declare, the same way it is assigned to the array in your activity. Suppose Cars will be assigned to categories[0]. Hope this helps.

Upvotes: 16

Related Questions