como ler o valor de string.xml no android?


368

Eu escrevi a linha:

String Mess = R.string.mess_1 ;

para obter o valor da string, mas em vez de retornar a string, ele está me dando um id do tipo inteiro. Como posso obter o valor da string? Eu mencionei o valor da string no string.xmlarquivo.

Respostas:


808

Tente isto

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

ATUALIZAR

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

Você pode usar um getString(int)ou getText(int)para recuperar uma sequência. getText(int)manterá qualquer estilo de rich text aplicado à string.

Referência: https://developer.android.com/guide/topics/resources/string-resource.html


87
você pode simplificar isso para this.getString(R.string.some_id)se você já estiver em Context(Atividade ou Serviço).
Matthias

Eu usei isso: String message + = getResources (). GetString (R.string.string1) + "some more word ..."; e eu queria enviar essa string via sms, mas não está funcionando. Funciona bem sem o recurso de string. Estou esquecendo de algo?
keybee

9
Você pode simplificar ainda mais o getString (R.string.some_id). E se você deseja personalizar a string, pode torná-la algo como "Bem-vindo,% 1 $ s", e usar getString (R.string.some_id, "John Doe"). para obter "Welcome, John Doe" em tempo de execução.
M Granja

Também funciona para outros tipos como eu usei apenasgetResouces().getInteger(R.integer.my_value_in_xml)
Noah Herron

61

Em Atividade:

this.getString(R.string.resource_name)

Se não estiver em atividade, mas tiver acesso ao contexto:

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

3
Você não precisa incluir thisenquanto estiver na Atividade. Simplesmente getString()permitirá que você faça as coisas.
CopsOnRoad

43

Eu estou usando isso:

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

10
Aviso - de acordo com esta resposta, citando a documentação do Android, o uso Resources.getSystem()não fornece os recursos do aplicativo, mas apenas os do Android. Não deve ser usado para recursos como string. Usei essa solução e o aplicativo travou, lançando uma notfoundexceptionque era difícil de entender (como o recurso existe strings.xml).
et_l

tentei também - não funciona. bom demais para ser verdade
:)

23

A propósito, também é possível criar matrizes de strings no string.xml da seguinte maneira:

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

E, em sua Atividade, você pode obter a referência da seguinte forma:

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

Esta resposta deve estar lá em cima. Na maioria das vezes, você está lendo matrizes de XML e não cadeias únicas.
Ojonugwa Jude Ochalifu

11

Somente para referências futuras.

Na documentação dos recursos String, ele diz:

Você pode usar getString (int) ou getText (int) para recuperar uma sequência. O getText (int) manterá qualquer estilo de rich text aplicado à string.


6

Solução 1

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

Solução 2

String mess = getString(R.string.mess_1)

3

Em fragmentos, você pode usar

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

3

Se você deseja adicionar o valor da string a um botão, por exemplo, use

android:text="@string/NameOfTheString"

O texto definido em strings.xml tem a seguinte aparência:

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

2

Você deve fazer referência ao nome do contexto antes de usar getResources()no Android.

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

OU

Context mcontext=getApplicationContext();

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

1

Você pode usar este código:

 getText (R.string.mess_1); 

Basicamente, você precisa passar o ID do recurso como um parâmetro para o método getText ().


1

Se você estiver em uma atividade, poderá usar

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

Se você não estiver em uma atividade, use isto:

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

1

Detalhes

  • Android Studio 3.1.4
  • Versão Kotlin: 1.2.60

Tarefa

  • uso de linha única
  • código mínimo
  • use sugestões do compilador

Etapa 1. Aplicativo ()

Obter link para o contexto do seu aplicativo

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

}

Etapa 2. Adicionar extensão 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>

Obter valor da string:

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

Resultados

insira a descrição da imagem aqui insira a descrição da imagem aqui


1

enquanto você escreve R. você está se referindo à R.javaclasse criada pelo eclipse, use getResources().getString()e passe ido recurso a partir do qual você está tentando ler dentro do getString()método.

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


0

**

Espero que este código seja benéfico

**

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

0

Atualizar

  • Você pode usar getString(R.string.some_string_id)em ambos Activityou Fragment.
  • Você pode usar Context.getString(R.string.some_string_id)onde você não tem acesso direto ao getString()método. Like Dialog.

O problema é onde você não tem Contextacesso , como um método em sua Utilclasse.

Suponha abaixo o método sem contexto.

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

Agora você passará Contextcomo parâmetro neste método e usarágetString().

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

O que eu faço é

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

O que? É muito simples de usar em qualquer lugar do seu aplicativo!

Então, aqui está uma solução exclusiva de bônus, pela qual você pode acessar recursos de qualquer 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;
    }

}

Adicione um campo de nome à sua manifest.xml <applicationtag.

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

Agora você está pronto para ir.



0

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

Agora sua string é copiada para myString. Espero que funcione para você.


0

Você pode ler diretamente o valor definido em strings.xml:

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

e defina em uma variável:

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

mas podemos definir a string na exibição:

<TextView
    android:id="@+id/myTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello"/>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.