¿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.

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


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)

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

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"

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.


6

Solución 1

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

Solución 2

String mess = getString(R.string.mess_1)

3

En fragmentos, puedes usar

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

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>

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

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


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)

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í


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


0

** **

Espero que este código sea beneficioso

** **

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

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.



0

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

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


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"/>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.