¿Cómo leer el valor de string.xml en Android?

368

He escrito la línea:

String Mess = R.string.mess_1 ;

para obtener el valor de la cadena, pero en lugar de devolver la cadena, me da una identificación de tipo entero. ¿Cómo puedo obtener su valor de cadena? Mencioné el valor de la cadena en el string.xmlarchivo.

UMAR
fuente

Respuestas:

808

Prueba esto

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

ACTUALIZAR

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

Puede usar getString(int)o getText(int)para recuperar una cadena. getText(int)retendrá cualquier estilo de texto enriquecido aplicado a la cadena.

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

ccheneson
fuente
87
puedes simplificar eso this.getString(R.string.some_id)si ya estás en una Context(Actividad o Servicio).
Matthias
Usé esto: Mensaje de cadena + = getResources (). GetString (R.string.string1) + "alguna palabra más ..."; y quería enviar esta cadena a través de sms, pero no funciona. Funciona bien sin el recurso de cadena. ¿Me estoy perdiendo de algo?
keybee
99
Puede simplificar eso aún más para obtener getString (R.string.some_id). Y si desea personalizar la cadena, puede hacer que la cadena sea algo así como "Bienvenido,% 1 $ s", luego puede usar getString (R.string.some_id, "John Doe"). para obtener "Bienvenido, John Doe" en tiempo de ejecución.
M Granja
También funciona para otros tipos como los que acabo de usargetResouces().getInteger(R.integer.my_value_in_xml)
Noah Herron
61

En actividad:

this.getString(R.string.resource_name)

Si no está en actividad pero tiene acceso al contexto:

context.getString(R.string.resource_name)
application.getString(R.string.resource_name)
Hakan Cakirkan
fuente
3
No tiene que incluir thismientras está en Actividad. Simplemente getString()te dejará hacer cosas.
CopsOnRoad
43

Estoy usando esto:

String URL = Resources.getSystem().getString(R.string.mess_1);
Robertas Uldukis
fuente
10
Advertencia: según esta respuesta que cita la documentación de Android, el uso Resources.getSystem()no le proporciona los recursos de la aplicación, sino solo los de Android. No debe usarse para recursos como string. Usé esta solución y la aplicación se bloqueó, arrojando una notfoundexceptionque era difícil de entender (ya que el recurso existe strings.xml).
et_l
también lo probé, NO funciona. demasiado bueno para ser verdad
:)
23

Por cierto, también es posible crear matrices de cadenas en strings.xml de esta manera:

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

Y luego de su Actividad puede obtener la referencia de esta manera:

String[] tab_names = getResources().getStringArray(R.array.tab_names);
String tabname1=tab_names[0];//"My Tab 1"
oabarca
fuente
Esta respuesta debería estar ahí. La mayoría de las veces, estás leyendo matrices de XML, no cadenas individuales.
Ojonugwa Jude Ochalifu
11

Solo para futuras referencias.

En la documentación de recursos de String dice:

Puede usar getString (int) o getText (int) para recuperar una cadena. getText (int) retendrá cualquier estilo de texto enriquecido aplicado a la cadena.

Alvaro
fuente
6

Solución 1

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

Solución 2

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

En fragmentos, puedes usar

getActivity().getString(R.id.whatever);
ir2pid
fuente
3

Si desea agregar el valor de cadena a un botón, por ejemplo, use

android:text="@string/NameOfTheString"

El texto definido en strings.xml tiene este aspecto:

 <string name="NameOfTheString">Test string</string>
Bondus
fuente
2

Debe hacer referencia al nombre del contexto antes de usarlo getResources()en Android.

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

O

Context mcontext=getApplicationContext();

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

Puedes usar este código:

 getText (R.string.mess_1); 

Básicamente, debe pasar la identificación del recurso como parámetro al método getText ().

coderz
fuente
1

Si estás en una actividad puedes usar

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

Si no está en una Actividad, use esto:

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

Detalles

  • Android Studio 3.1.4
  • Versión de Kotlin: 1.2.60

Tarea

  • uso de una sola línea
  • código mínimo
  • usar sugerencias del compilador

Paso 1. Aplicación ()

Obtenga un enlace al contexto de su solicitud

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

}

Paso 2. Agregar extensión 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>

Obtener valor de cadena:

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

Resultados

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Vasily Bodnarchuk
fuente
1

mientras que u escribir R. te estás refiriendo a la R.javaclase creada por eclipse, usa getResources().getString()y pasa idel recurso del que estás intentando leer dentro del getString()método.

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

Giridhar Karnik
fuente
0

** **

Espero que este código sea beneficioso

** **

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

Actualizar

  • Se puede usar getString(R.string.some_string_id)en ambos Activityo Fragment.
  • Puede usar Context.getString(R.string.some_string_id)donde no tiene acceso directo al getString()método. Al igual Dialog.

El problema es donde no tienes Contextacceso , como un método en tu Utilclase.

Asuma el siguiente método sin contexto.

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

Ahora pasará Contextcomo parámetro en este método y usarágetString().

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

Lo que hago es

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

¿Qué? ¡Es muy fácil de usar en cualquier lugar de su aplicación!

Así que aquí hay una solución única de bonificación por la cual puede acceder a los recursos desde cualquier lugar 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;
    }

}

Agregue un campo de nombre a su manifest.xml <applicationetiqueta.

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

Ahora estás listo para irte.

Khemraj
fuente
0

getString (R.string.your_string) obtiene el resultado

Bisht Lalit
fuente
0

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

Ahora su cadena se copia en myString. Espero que funcione para ti.

KAbhijeet21
fuente
0

Puede leer directamente el valor definido en strings.xml:

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

y establecer en una variable:

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

pero podemos definir la cadena en la vista:

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