Android: Wie bekomme ich eine Zeichenfolge von Ressourcen, die ihren Namen verwenden?


Answers

Ich habe das gleiche Problem. Aber dieser Code unten funktioniert für mich: Überprüfen Sie, ob Ihr Paketname korrekt ist. Sie müssen sich auf das Root-Paket Ihrer Android-Anwendung beziehen.

private String getStringResourceByName(String aString) {
      String packageName = getPackageName();
      int resId = getResources().getIdentifier(aString, "string", packageName);
      return getString(resId);
    }
Question

Ich hätte gerne zwei Sprachen für die Benutzeroberfläche und separate String-Werte für sie in meiner Ressourcendatei res\values\strings.xml :

<string name="tab_Books_en">Books</string>
<string name="tab_Quotes_en">Quotes</string>
<string name="tab_Questions_en">Questions</string>
<string name="tab_Notes_en">Notes</string>
<string name="tab_Bookmarks_en">Bookmarks</string>

<string name="tab_Books_ru">Книги</string>
<string name="tab_Quotes_ru">Цитаты</string>
<string name="tab_Questions_ru">Вопросы</string>
<string name="tab_Notes_ru">Заметки</string>
<string name="tab_Bookmarks_ru">Закладки</string>

Jetzt muss ich diese Werte in meiner App dynamisch abrufen:

spec.setContent(R.id.tabPage1);
String pack = getPackageName();
String id = "tab_Books_" + Central.lang;
int i = Central.Res.getIdentifier(id, "string", pack);
String str = Central.Res.getString(i);

Mein Problem ist, dass i = 0 .

Warum funktioniert es nicht in meinem Fall?




String myString = getString (R.string.mystring);

einfacher Weg







getResources().getString(getResources().getIdentifier("propertyName", "string", getPackageName()))



Es gibt auch eine Reihe von vordefinierten Android-Strings wie "Ok", "Abbrechen" und viele andere - damit Sie nicht alle deklarieren müssen. Sie sind einfach verfügbar durch:

getString(android.R.string.ok)

(In diesem Fall "Ok" -String). Übrigens gibt es auch andere Android Ressourcen wie zum Beispiel Icons Bilder etc.