Cómo acceder a los valores de Android “strings.xml” en Kotlin

3 minutos de lectura

Avatar de usuario de Dheeraj
Dheeraj

¿Cómo puedo acceder a los valores desde el Android? cadenas.xml usando kotlin?

class MainActivity : AppCompatActivity(), View.OnClickListener {
    override fun onClick(p0: View?) {
        getToastCalled("")
        TODO("not implemented")
    }

    private fun getToastCalled(message: String) {
        TODO("not implemented")
    }

    var btn: Button? = null;

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        var tv_name=findViewById(R.id.tv) as TextView
        btn=findViewById(R.id.button) as Button
        tv_name.setText(KtTest().name);
        (btn as Button).setOnClickListener(MainActivity@this)
    }
}

  • Al igual que en Java.

    – nhaarman

    2 de julio de 2017 a las 13:59

  • Ya ha hecho referencia a diseños e identificadores en su ejemplo. También tenga en cuenta que puede convertir archivos java a kotlin usando ctrl + shift + alt + k. También hay una extensa documentación sobre los métodos disponibles en kotl.in

    – Alan W.

    3 de julio de 2017 a las 1:54

  • muchas gracias por la ayuda..

    – Dheeraj

    24/09/2017 a las 15:34

Avatar de usuario de Robin
Robin

Acceder a valores de cadena en Kotlin funciona exactamente igual que en Java, solo con la sintaxis de Kotlin:

val string: String = getString(R.string.your_string_id)

(Esto supone que su código está dentro de un Android Activityo una clase similar que hereda de Context. Si no, necesita obtener un Context instancia desde algún lugar, y cámbielo a myContext.getString(...).)

  • Esto podría producir nulo

    – Igor Ganapolski

    23 oct 2018 a las 17:34

  • @IgorGanapolsky Bueno, sí, técnicamente podría, pero eso es un error de programación o algo está mal con el proceso de compilación si lo hace. Esta llamada que devuelve nulo no es algo de lo que pueda recuperarse de manera significativa, por lo que en Java, nulo nunca se verifica aquí, y afortunadamente tampoco es necesario en Kotlin.

    – Robin

    23 oct 2018 a las 20:12

  • Traté de usar esta función, Android Studio ni siquiera pudo encontrarla

    – Baya de serbal

    6 de abril de 2020 a las 2:31

  • @Serba getString se define en Context. Mi código de ejemplo fue escrito asumiendo que estás dentro de un Android Activityque hereda de Contextpero si lo necesita en otro lugar, necesita tener un Context disponible en alguna parte. Necesitas cambiar el ejemplo a myContext.getString(...) en ese caso. (Descargo de responsabilidad: no he desarrollado Android durante mucho tiempo, es posible que los detalles hayan cambiado)

    – Robin

    6 de abril de 2020 a las 13:32

  • @Robin, sí, me di cuenta después de escribir mi comentario, estaba tratando de hacerlo en una clase de objeto, simplemente no se indicó explícitamente

    – Baya de serbal

    7 de abril de 2020 a las 0:34

Avatar de usuario de Prat137
Prat137

si está accediendo fuera de oncreate, entonces

    Resources.getSystem().getString(R.string.btn_yes)  

Avatar de usuario de Dhivysh
Dhivysh

Si necesita acceder a toda la matriz:

val data= resources.getStringArray(R.array.array_id)

Si ayuda, así es como lo hice: necesita el contexto de la aplicación y también para importar la Clase R

applicationContext.getString(R.string.text_string)
import com.example.yourpackagename.R

Para usar strings.xml en mi código, hago lo siguiente:
textView.text = "${getString(R.string.my_text)}"

Avatar de usuario de Ola Ström
Ola Ström

La respuesta de @Robin casi funcionó para mí, pero si no agrego this.resources antes de getString(R.string.tv) mi aplicación sigue fallando.

Entonces, para acceder a un valor de cadena desde dentro del cadenas.xml presentar en kotlin usar:
this.resources.getString(R.string.tv)

O simplemente:
resources.getString(R.string.tv)

avatar de usuario de zaerymoghaddam
zaerymoghaddam

Utilice el formato – R.string.string_name

Menciónelo explícitamente, por ejemplo:

R.string.loadingText,

Dado que su archivo XML tiene lo siguiente como parte de los recursos:

<string name="loadingText">The actual text to be displayed</string>

  • ¿Esto no devuelve la identificación entera de esa cadena XML, en lugar del contenido de la cadena en sí?

    – Marios Yiannakou

    12 de julio de 2021 a las 14:20

¿Ha sido útil esta solución?