come leggere il valore da string.xml in Android?


368

Ho scritto la riga:

String Mess = R.string.mess_1 ;

per ottenere il valore della stringa, ma invece di restituire la stringa, mi sta dando un ID di tipo intero. Come posso ottenere il suo valore di stringa? Ho menzionato il valore della stringa nel string.xmlfile.

Risposte:


808

Prova questo

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

AGGIORNARE

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

È possibile utilizzare getString(int)o getText(int)per recuperare una stringa. getText(int)manterrà qualsiasi stile rich text applicato alla stringa.

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


87
puoi semplificarlo a this.getString(R.string.some_id)se sei già in Context(Attività o Servizio).
Matthias,

Ho usato questo: String message + = getResources (). GetString (R.string.string1) + "qualche altra parola ..."; e volevo inviare questa stringa via sms, ma non funziona. Funziona bene senza la risorsa stringa. Mi sto perdendo qualcosa?
keybee,

9
Puoi semplificarlo ulteriormente per getString (R.string.some_id). E se vuoi personalizzare la stringa, puoi rendere la stringa qualcosa come "Benvenuto,% 1 $ s", quindi puoi usare getString (R.string.some_id, "John Doe"). per ottenere "Benvenuto, John Doe" in fase di esecuzione.
M Granja,

Funziona anche con altri tipi come ho appena usatogetResouces().getInteger(R.integer.my_value_in_xml)
Noah Herron,

61

In attività:

this.getString(R.string.resource_name)

Se non in attività ma hai accesso al contesto:

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

3
Non è necessario includere thismentre si è in attività. Semplicemente getString()ti lascerà fare le cose.
CopsOnRoad,

43

Sto usando questo:

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

10
Avvertenza: secondo questa risposta citando la documentazione di Android, l'utilizzo Resources.getSystem()non fornisce le risorse dell'applicazione, ma solo quella di Android. Non dovrebbe essere usato per risorse come string. Ho usato questa soluzione e l'applicazione si è arrestata in modo anomalo, generando un notfoundexceptionrisultato difficile da capire (poiché esiste la risorsa strings.xml).
et_l

provato anche questo - NON funziona. troppo bello per essere vero
:)

23

A proposito, è anche possibile creare array di stringhe in strings.xml in questo modo:

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

E poi dalla tua attività puoi ottenere il riferimento in questo modo:

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

Questa risposta dovrebbe essere lassù. Nella maggior parte dei casi, stai leggendo array da XML e non stringhe singole.
Ojonugwa Jude Ochalifu,

11

Solo per riferimenti futuri.

Nella documentazione delle risorse di stringa si dice:

È possibile utilizzare getString (int) o getText (int) per recuperare una stringa. getText (int) manterrà qualsiasi stile rich text applicato alla stringa.


6

Soluzione 1

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

Soluzione 2

String mess = getString(R.string.mess_1)

3

In frammenti, puoi usare

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

3

Ad esempio, se si desidera aggiungere il valore di stringa a un pulsante, utilizzare semplicemente

android:text="@string/NameOfTheString"

Il testo definito in strings.xml è simile al seguente:

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

2

È necessario fare riferimento al nome di contesto prima di utilizzare getResources()in Android.

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

O

Context mcontext=getApplicationContext();

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

1

Puoi usare questo codice:

 getText (R.string.mess_1); 

Fondamentalmente, è necessario passare l'id risorsa come parametro al metodo getText ().


1

Se sei in un'attività puoi usarla

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

Se non sei in un'attività, usa questo:

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

1

Dettagli

  • Android Studio 3.1.4
  • Versione di Kotlin: 1.2.60

Compito

  • uso a linea singola
  • codice minimo
  • usa i suggerimenti del compilatore

Passaggio 1. Applicazione ()

Ottieni link al contesto della tua applicazione

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

}

Passaggio 2. Aggiungi l'estensione int

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

uso

strings.xml

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

Ottieni valore stringa:

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

risultati

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine


1

mentre scrivi R. ti riferisci alla R.javaclasse creata da eclipse, usa getResources().getString()e passa idla risorsa da cui stai provando a leggere all'interno del getString()metodo.

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


0

**

Spero che questo codice sia utile

**

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

0

Aggiornare

  • È possibile utilizzare getString(R.string.some_string_id)in entrambi Activityo Fragment.
  • Puoi usare Context.getString(R.string.some_string_id)dove non hai accesso diretto al getString()metodo. Come Dialog.

Il problema è dove non hai Contextaccesso , come un metodo nella tua Utilclasse.

Assumi il metodo seguente senza contesto.

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

Ora passerai Contextcome parametro in questo metodo e utilizzeraigetString().

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

Quello che faccio è

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

Che cosa? È molto semplice da usare ovunque nella tua app!

Quindi ecco una soluzione unica di Bonus grazie alla quale puoi accedere alle risorse da qualsiasi luogo simile 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;
    }

}

Aggiungi il campo del nome al tuo manifest.xml <applicationtag.

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

Ora sei a posto.



0

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

Ora la tua stringa viene copiata in myString. Spero che funzionerà per te.


0

Puoi leggere direttamente il valore definito in strings.xml:

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

e impostato in una variabile:

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

ma possiamo definire la stringa nella vista:

<TextView
    android:id="@+id/myTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello"/>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.