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.

UMAR
fonte

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

ccheneson
fonte
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)
Hakan Cakirkan
fonte
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);
Robertas Uldukis
fonte
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"
oabarca
fonte
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.

Alvaro
fonte
6

Solução 1

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

Solução 2

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

Em fragmentos, você pode usar

getActivity().getString(R.id.whatever);
ir2pid
fonte
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>
bondus
fonte
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);
Ashish Vora
fonte
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 ().

coderz
fonte
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)
Hoque MD Zahidul
fonte
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

Vasily Bodnarchuk
fonte
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);

Giridhar Karnik
fonte
0

**

Espero que este código seja benéfico

**

String user = getResources().getString(R.string.muser); 
dhiraj kakran
fonte
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.

Khemraj
fonte
0

getString (R.string.your_string) obtém o resultado

Bisht Lalit
fonte
0

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

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

KAbhijeet21
fonte
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"/>
Jorgesys
fonte