Получить список строк, присутствующих в файле strings.xml в Android

Мне нужен список строк, присутствующих в файле strings.xml.

Кто-нибудь знает, как это получить ??? Одна вещь, которую я нашел, это назначение идентификаторов в последовательном порядке внутри R.java, но как получить начальный идентификатор не ясен.

Для примера у меня есть 100 строк в моем файле strings.xml, как показано ниже, и я хочу читать в то время, когда не хотел давать 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> 

Solutions Collecting From Web of "Получить список строк, присутствующих в файле strings.xml в Android"

Если вы хотите получить доступ ко всем строкам из файла strings.xml вы можете использовать отражение в классе R.string . Пример можно найти в этом ответе , вам просто нужно будет заменить drawables на строки.

Вы можете объявить свои строки в файле 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]. Надеюсь это поможет.

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

Вы можете объявить целочисленный массив с записью для каждой строки. Я сделал это для массива цветов один раз, поэтому я думаю, что он работает и для строк.

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, когда вы изменяете свои строковые ресурсы, поэтому это, безусловно, не идеально.