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.

UMAR
quelle

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

Ccheneson
quelle
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)
Hakan Cakirkan
quelle
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);
Robertas Uldukis
quelle
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"
oabarca
quelle
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.

Alvaro
quelle
6

Lösung 1

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

Lösung 2

String mess = getString(R.string.mess_1)
thhVictor
quelle
3

In Fragmenten können Sie verwenden

getActivity().getString(R.id.whatever);
ir2pid
quelle
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>
Bondus
quelle
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);
Ashish Vora
quelle
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.

coderz
quelle
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)
Hoque MD Zahidul
quelle
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

Wassili Bodnarchuk
quelle
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);

Giridhar Karnik
quelle
0

** **.

Ich hoffe, dieser Code ist von Vorteil

** **.

String user = getResources().getString(R.string.muser); 
Dhiraj Kakran
quelle
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.

Khemraj
quelle
0

getString (R.string.your_string) erhält das Ergebnis

Bisht Lalit
quelle
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.

KAbhijeet21
quelle
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"/>
Jorgesys
quelle