676 Stimmen

Android: Wie erhalte ich eine Zeichenkette aus einer Ressource anhand ihres Namens?

Ich möchte 2 Sprachen für die UI und separate Zeichenfolgenwerte für sie in meiner Ressourcendatei haben 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 dynamisch in meiner Anwendung 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 in meinem Fall nicht?

7voto

Nammen8 Punkte 592

Wenn Sie keinen Aktivitätsbezug haben, können Sie Ihren Kontext auf diese Weise verwenden:

getContext().getString(R.string.your_string_name);

6voto

M.Muzammil Punkte 555

In Kotlin, Nutzung von Erweiterungsfunktionen

fun Context.getStringByName(name: String): String {
    return getString(resources.getIdentifier(name, "string", packageName))
}

6voto

rohegde7 Punkte 543

Wenn Sie es in einer Aktivität oder einem Fragment erhalten möchten, dann:

getContext().getResources().getString(R.string.string_name);

Wenn Sie es von einer Klasse außerhalb der Aktivität oder des Fragments abrufen wollen, wo Sie den Aktivitätskontext nicht haben, dann verwenden Sie den Anwendungskontext:

getApplicationContext().getResources().getString(R.string.string_name);

4voto

forsberg Punkte 1451

Außerdem gibt es eine Reihe von vordefinierte Android-Zeichenfolgen wie "Ok", "Abbrechen" und viele andere - Sie müssen also nicht alles angeben. Sie sind einfach verfügbar durch:

getString(android.R.string.ok)

(In diesem Fall die Zeichenfolge "Ok"). Übrigens gibt es auch andere Android-Ressourcen, wie z. B. Icons, Bilder usw.

3voto

Avinash Punkte 361

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

einfache Möglichkeit

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X