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.

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


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)

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);

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"

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.


6

Solution 1

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

Solution 2

String mess = getString(R.string.mess_1)

3

En fragments, vous pouvez utiliser

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

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>

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);

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


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)

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


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);


0

**

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

**

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

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.



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.


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"/>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.