Wie lese ich einen Wert aus string.xml in Android?


368

Ich habe die Zeile geschrieben:

String Mess = R.string.mess_1 ;

Um einen String-Wert zu erhalten, aber anstatt einen String zurückzugeben, gibt es mir eine ID vom Typ Integer. Wie kann ich den Zeichenfolgenwert ermitteln? Ich habe den Zeichenfolgenwert in der string.xmlDatei erwähnt.

Antworten:


807

Versuche dies

String mess = getResources().getString(R.string.mess_1);

AKTUALISIEREN

String string = getString(R.string.hello);

Sie können entweder getString(int)oder verwenden getText(int), um eine Zeichenfolge abzurufen. getText(int)behält alle auf die Zeichenfolge angewendeten Rich-Text-Stile bei.

Referenz: https://developer.android.com/guide/topics/resources/string-resource.html


87
Sie können dies vereinfachen, this.getString(R.string.some_id)wenn Sie sich bereits in einer Context(Aktivität oder Dienst) befinden.
Matthias

Ich habe folgendes verwendet: String message + = getResources (). GetString (R.string.string1) + "noch ein Wort ..."; und ich wollte diesen String per SMS senden, aber es funktioniert nicht. Es funktioniert gut ohne die String-Ressource. Vermisse ich etwas
Keybee

9
Sie können dies noch weiter vereinfachen, um getString (R.string.some_id) zu erhalten. Und wenn Sie die Zeichenfolge anpassen möchten, können Sie die Zeichenfolge wie "Willkommen,% 1 $ s" erstellen und dann getString (R.string.some_id, "John Doe") verwenden. um zur Laufzeit "Welcome, John Doe" zu erhalten.
M Granja

Funktioniert auch für andere Typen, wie ich sie gerade benutzt habegetResouces().getInteger(R.integer.my_value_in_xml)
Noah Herron

61

In Aktivität:

this.getString(R.string.resource_name)

Wenn Sie nicht aktiv sind, aber Zugriff auf den Kontext haben:

context.getString(R.string.resource_name)
application.getString(R.string.resource_name)

3
Sie müssen nicht einschließen, thiswährend Sie in Aktivität sind. Einfach getString()werden Sie Dinge tun lassen.
CopsOnRoad

43

Ich benutze dies:

String URL = Resources.getSystem().getString(R.string.mess_1);

10
Warnung - Laut dieser Antwort, die die Dokumentation von Android zitiert, erhalten Sie bei Verwendung von Resources.getSystem()nicht die Anwendungsressourcen, sondern nur die von Android. Es sollte nicht für Ressourcen wie verwendet werden string. Ich habe diese Lösung verwendet und die Anwendung stürzte ab und warf eine notfoundexceptionschwer verständliche (da die Ressource in vorhanden ist strings.xml).
et_l

habe es auch versucht - funktioniert NICHT. zu schön um wahr zu sein
:)

23

Übrigens ist es auch möglich, String-Arrays in der Datei strings.xml wie folgt zu erstellen:

<string-array name="tabs_names"> 
    <item>My Tab 1</item> 
    <item>My Tab 2</item>
</string-array>

Und dann können Sie aus Ihrer Aktivität die Referenz wie folgt erhalten:

String[] tab_names = getResources().getStringArray(R.array.tab_names);
String tabname1=tab_names[0];//"My Tab 1"

Diese Antwort sollte dort oben sein. Meistens lesen Sie Arrays aus XML, nicht aus einzelnen Zeichenfolgen.
Ojonugwa Jude Ochalifu

11

Nur für zukünftige Referenzen.

In der Dokumentation zu den String-Ressourcen heißt es:

Sie können entweder getString (int) oder getText (int) verwenden, um eine Zeichenfolge abzurufen. getText (int) behält alle Rich-Text-Stile bei, die auf die Zeichenfolge angewendet werden.


6

Lösung 1

Context context;
String mess = context.getString(R.string.mess_1)

Lösung 2

String mess = getString(R.string.mess_1)

3

In Fragmenten können Sie verwenden

getActivity().getString(R.id.whatever);

3

Wenn Sie den Zeichenfolgenwert beispielsweise einer Schaltfläche hinzufügen möchten, verwenden Sie diese einfach

android:text="@string/NameOfTheString"

Der definierte Text in strings.xml sieht folgendermaßen aus:

 <string name="NameOfTheString">Test string</string>

2

Sie müssen auf den Kontextnamen verweisen, bevor Sie ihn getResources()in Android verwenden können.

String user=getApplicationContext().getResources().getString(R.string.muser);

ODER

Context mcontext=getApplicationContext();

String user=mcontext.getResources().getString(R.string.muser);

1

Sie können diesen Code verwenden:

 getText (R.string.mess_1); 

Grundsätzlich müssen Sie die Ressourcen-ID als Parameter an die Methode getText () übergeben.


1

Wenn Sie in einer Aktivität sind, können Sie verwenden

getResources().getString(R.string.whatever_string_youWant);

Wenn Sie nicht an einer Aktivität teilnehmen, verwenden Sie Folgendes:

getApplicationContext.getResource().getString(R.String.Whatever_String_you_want)

1

Einzelheiten

  • Android Studio 3.1.4
  • Kotlin-Version: 1.2.60

Aufgabe

  • Einzeilige Verwendung
  • Mindestcode
  • Verwenden Sie Vorschläge aus dem Compiler

Schritt 1. Anwendung ()

Holen Sie sich einen Link zum Kontext Ihrer Anwendung

class MY_APPLICATION_NAME: Application() {

    companion object {
        private lateinit var instance: MY_APPLICATION_NAME

        fun getAppContext(): Context = instance.applicationContext
    }

    override fun onCreate() {
        instance = this
        super.onCreate()
    }

}

Schritt 2. Fügen Sie die Erweiterung int hinzu

inline fun Int.toLocalizedString(): String = MY_APPLICATION_NAME.getAppContext().resources.getString(this)

Verwendungszweck

string.xml

<resources>
    <!-- .......  -->
    <string name="no_internet_connection">No internet connection</string>
    <!-- .......  -->
</resources>

String-Wert abrufen:

val errorMessage = R.string.no_internet_connection.toLocalizedString()

Ergebnisse

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein


1

während du schreibst R. Wenn Sie sich auf die R.javadurch Eclipse erstellte Klasse beziehen , verwenden Sie die Ressource, aus der Sie in der Methode lesen möchten, getResources().getString()und übergeben idSie sie getString().

Beispiel: String[] yourStringArray = getResources().getStringArray(R.array.Your_array);


0

** **.

Ich hoffe, dieser Code ist von Vorteil

** **.

String user = getResources().getString(R.string.muser); 

0

Aktualisieren

  • Sie können getString(R.string.some_string_id)in beiden Activityoder verwenden Fragment.
  • Sie können verwenden, Context.getString(R.string.some_string_id)wenn Sie keinen direkten Zugriff auf die getString()Methode haben. Wie Dialog.

Das Problem ist, wo Sie keinen ContextZugriff haben , wie bei einer Methode in Ihrer UtilKlasse.

Nehmen Sie die folgende Methode ohne Kontext an.

public void someMethod(){
    ...
    // can't use getResource() or getString() without Context.
}

Jetzt werden Sie Contextals Parameter in dieser Methode übergeben und verwendengetString().

public void someMethod(Context context){
    ...
    context.getString(R.string.some_id);
}

Was ich tue ist

public void someMethod(){
    ...
    App.getRes().getString(R.string.some_id)
}

Was? Es ist sehr einfach, überall in Ihrer App zu verwenden!

Hier ist eine einzigartige Bonuslösung, mit der Sie von überall auf Ressourcen zugreifen können Util class.

import android.app.Application;
import android.content.res.Resources;

public class App extends Application {
    private static App mInstance;
    private static Resources res;


    @Override
    public void onCreate() {
        super.onCreate();
        mInstance = this;
        res = getResources();
    }

    public static App getInstance() {
        return mInstance;
    }

    public static Resources getResourses() {
        return res;
    }

}

Fügen Sie Ihrem manifest.xml <applicationTag ein Namensfeld hinzu.

<application
        android:name=".App"
        ...
        >
        ...
    </application>

Jetzt können Sie loslegen.



0

String myString = getResources().getString(R.string.here_your_string_name);

Jetzt wird Ihre Zeichenfolge in myString kopiert. Ich hoffe es wird für dich funktionieren.


0

Sie können den in strings.xml definierten Wert direkt lesen:

<resources>
    <string name="hello">Hello StackOverflow!</string>
</resources>

und in eine Variable setzen:

String mymessage = getString(R.string.hello);

aber wir können die Zeichenfolge in der Ansicht definieren:

<TextView
    android:id="@+id/myTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello"/>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.