comment lire la valeur de string.xml dans Android?

368

J'ai écrit la ligne:

String Mess = R.string.mess_1 ;

pour obtenir une valeur de chaîne, mais au lieu de renvoyer une chaîne, cela me donne un identifiant de type entier. Comment puis-je obtenir sa valeur de chaîne? J'ai mentionné la valeur de chaîne dans le string.xmlfichier.

UMAR
la source

Réponses:

808

Essaye ça

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

MISE À JOUR

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

Vous pouvez utiliser soit getString(int)ou getText(int)pour récupérer une chaîne. getText(int)conservera tout style de texte enrichi appliqué à la chaîne.

Référence: https://developer.android.com/guide/topics/resources/string-resource.html

ccheneson
la source
87
vous pouvez simplifier cela this.getString(R.string.some_id)si vous êtes déjà dans une Context(activité ou service).
Matthias
J'ai utilisé ceci: String message + = getResources (). GetString (R.string.string1) + "some more word ..."; et je voulais envoyer cette chaîne via sms, mais cela ne fonctionne pas. Cela fonctionne bien sans la ressource de chaîne. Suis-je en train de manquer quelque chose?
keybee
9
Vous pouvez encore simplifier cela pour obtenir GetString (R.string.some_id). Et si vous souhaitez personnaliser la chaîne, vous pouvez créer quelque chose comme "Bienvenue,% 1 $ s", puis vous pouvez utiliser getString (R.string.some_id, "John Doe"). pour obtenir "Bienvenue, John Doe" à l'exécution.
M Granja
Fonctionne également pour d'autres types comme je viens de l'utilisergetResouces().getInteger(R.integer.my_value_in_xml)
Noah Herron
61

En activité:

this.getString(R.string.resource_name)

S'il n'est pas en activité mais a accès au contexte:

context.getString(R.string.resource_name)
application.getString(R.string.resource_name)
Hakan Cakirkan
la source
3
Vous n'avez pas à l'inclure thislorsque vous êtes en activité. getString()Vous laissera simplement faire les choses.
CopsOnRoad
43

J'utilise ceci:

String URL = Resources.getSystem().getString(R.string.mess_1);
Robertas Uldukis
la source
10
Attention - selon cette réponse citant la documentation d'Android, l'utilisation Resources.getSystem()ne vous donne pas les ressources de l'application, mais uniquement celles d'Android. Il ne doit pas être utilisé pour des ressources comme string. J'ai utilisé cette solution et l'application s'est bloquée, lançant un notfoundexceptionqui était difficile à comprendre (car la ressource existe en strings.xml).
et_l
également essayé - ne fonctionne pas. trop beau pour être vrai
:)
23

Soit dit en passant, il est également possible de créer des tableaux de chaînes dans le fichier strings.xml comme ceci:

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

Et puis à partir de votre activité, vous pouvez obtenir la référence comme suit:

String[] tab_names = getResources().getStringArray(R.array.tab_names);
String tabname1=tab_names[0];//"My Tab 1"
oabarca
la source
Cette réponse devrait être là-haut. La plupart du temps, vous lisez des tableaux à partir de XML et non des chaînes uniques.
Ojonugwa Jude Ochalifu
11

Uniquement pour les références futures.

Dans la documentation des ressources String, il est indiqué:

Vous pouvez utiliser getString (int) ou getText (int) pour récupérer une chaîne. getText (int) conservera tout style de texte enrichi appliqué à la chaîne.

Alvaro
la source
6

Solution 1

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

Solution 2

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

En fragments, vous pouvez utiliser

getActivity().getString(R.id.whatever);
ir2pid
la source
3

Si vous souhaitez ajouter la valeur de chaîne à un bouton par exemple, utilisez simplement

android:text="@string/NameOfTheString"

Le texte défini dans strings.xml ressemble à ceci:

 <string name="NameOfTheString">Test string</string>
bondus
la source
2

Vous devez référencer le nom du contexte avant de l'utiliser getResources()dans Android.

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

OU

Context mcontext=getApplicationContext();

String user=mcontext.getResources().getString(R.string.muser);
Ashish Vora
la source
1

Vous pouvez utiliser ce code:

 getText (R.string.mess_1); 

Fondamentalement, vous devez passer l'ID de ressource en tant que paramètre à la méthode getText ().

coderz
la source
1

Si vous êtes dans une activité, vous pouvez utiliser

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

Si vous n'êtes pas dans une activité, utilisez ceci:

getApplicationContext.getResource().getString(R.String.Whatever_String_you_want)
Hoque MD Zahidul
la source
1

Détails

  • Android Studio 3.1.4
  • Version Kotlin: 1.2.60

Tâche

  • utilisation sur une seule ligne
  • code minimum
  • utiliser les suggestions du compilateur

Étape 1. Application ()

Obtenez un lien vers le contexte de votre application

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()
    }

}

Étape 2. Ajouter une extension int

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

Usage

strings.xml

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

Obtenez la valeur de la chaîne:

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

Résultats

entrez la description de l'image ici entrez la description de l'image ici

Vasily Bodnarchuk
la source
1

pendant que tu écris R. vous faites référence à la R.javaclasse créée par eclipse, utilisez getResources().getString()et transmettez idla ressource à partir de laquelle vous essayez de lire à l'intérieur de la getString()méthode.

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

Giridhar Karnik
la source
0

**

J'espère que ce code est bénéfique

**

String user = getResources().getString(R.string.muser); 
dhiraj kakran
la source
0

Mise à jour

  • Vous pouvez utiliser getString(R.string.some_string_id)à la fois Activityou Fragment.
  • Vous pouvez utiliser Context.getString(R.string.some_string_id)là où vous n'avez pas d'accès direct à la getString()méthode. Comme Dialog.

Le problème est où vous n'avez pas Contextaccès , comme une méthode dans votre Utilclasse.

Supposons la méthode ci-dessous sans contexte.

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

Vous allez maintenant passer Contextcomme paramètre dans cette méthode et utilisergetString().

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

Ce que je fais c'est

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

Quelle? Il est très simple à utiliser n'importe où dans votre application!

Voici donc une solution unique en bonus grâce à laquelle vous pouvez accéder aux ressources de n'importe où 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;
    }

}

Ajoutez un champ de nom à votre manifest.xml <applicationbalise.

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

Vous êtes maintenant prêt à partir.

Khemraj
la source
0

getString (R.string.your_string) obtenir le résultat

Bisht Lalit
la source
0

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

Maintenant, votre chaîne est copiée dans myString. J'espère que cela fonctionnera pour vous.

KAbhijeet21
la source
0

Vous pouvez lire directement la valeur définie dans strings.xml:

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

et mis dans une variable:

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

mais nous pouvons définir la chaîne dans la vue:

<TextView
    android:id="@+id/myTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello"/>
Jorgesys
la source