Как прочитать значение из string.xml в Android?

368

Я написал строку:

String Mess = R.string.mess_1 ;

чтобы получить строковое значение, но вместо возврата строки, он дает мне идентификатор типа целое число. Как я могу получить его строковое значение? Я упомянул строковое значение в string.xmlфайле.

UMAR
источник

Ответы:

808

Попробуй это

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

ОБНОВИТЬ

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

Вы можете использовать либо getString(int)или, getText(int)чтобы получить строку. getText(int)сохранит любой форматированный текст, примененный к строке.

Ссылка: https://developer.android.com/guide/topics/resources/string-resource.html

ccheneson
источник
87
Вы можете упростить это, this.getString(R.string.some_id)если вы уже в Context(Деятельность или Служба).
Матиас
Я использовал это: String message + = getResources (). GetString (R.string.string1) + "еще немного слов ..."; и я хотел отправить эту строку через смс, но она не работает. Работает нормально без строкового ресурса. Я что-то пропустил?
Кейби
9
Вы можете упростить это еще дальше до getString (R.string.some_id). И если вы хотите настроить строку, вы можете сделать строку что-то вроде «Welcome,% 1 $ s», затем вы можете использовать getString (R.string.some_id, «John Doe»). чтобы получить «Добро пожаловать, Джон Доу» во время выполнения.
М Гранжа
Также работает для других типов, как я только что использовалgetResouces().getInteger(R.integer.my_value_in_xml)
Ноа Херрон
61

В деятельности:

this.getString(R.string.resource_name)

Если не в деятельности, но иметь доступ к контексту:

context.getString(R.string.resource_name)
application.getString(R.string.resource_name)
Хакан Чакиркан
источник
3
Вам не нужно включать, thisпока вы находитесь в Activity. Просто getString()позволит вам делать вещи.
CopsOnRoad
43

Я использую это:

String URL = Resources.getSystem().getString(R.string.mess_1);
Робертас Улдукис
источник
10
Предупреждение - согласно этому ответу цитирование документации Android, использование Resources.getSystem()не дает вам ресурсы приложения, но только ресурсы Android. Он не должен использоваться для таких ресурсов, как string. Я использовал это решение, и приложение потерпело крах, бросив то, notfoundexceptionчто было трудно понять (поскольку ресурс существует в strings.xml).
et_l
попробовал так же - не работает. слишком хорошо, чтобы быть правдой
:)
23

Кстати, в strings.xml также можно создавать строковые массивы примерно так:

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

И тогда из вашей деятельности вы можете получить ссылку так:

String[] tab_names = getResources().getStringArray(R.array.tab_names);
String tabname1=tab_names[0];//"My Tab 1"
oabarca
источник
Этот ответ должен быть там. В большинстве случаев вы читаете массивы из XML, а не отдельные строки.
Оджонугва Джуд Очалифу
11

Только для будущих ссылок.

В документации по ресурсам String говорится:

Вы можете использовать getString (int) или getText (int) для получения строки. getText (int) будет> сохранять любой стиль расширенного текста, примененный к строке.

Alvaro
источник
6

Решение 1

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

Решение 2

String mess = getString(R.string.mess_1)
thhVictor
источник
3

Во фрагментах вы можете использовать

getActivity().getString(R.id.whatever);
ir2pid
источник
3

Если вы хотите добавить строковое значение к кнопке, например, просто используйте

android:text="@string/NameOfTheString"

Определенный текст в strings.xml выглядит так:

 <string name="NameOfTheString">Test string</string>
bondus
источник
2

Вы должны ссылаться на имя контекста перед использованием getResources()в Android.

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

ИЛИ

Context mcontext=getApplicationContext();

String user=mcontext.getResources().getString(R.string.muser);
Ашиш Вора
источник
1

Вы можете использовать этот код:

 GetText (R.string.mess_1); 

По сути, вам нужно передать идентификатор ресурса в качестве параметра методу getText ().

coderz
источник
1

Если вы в деятельности, вы можете использовать

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

Если вы не в Деятельности, используйте это:

getApplicationContext.getResource().getString(R.String.Whatever_String_you_want)
Hoque MD Захидул
источник
1

подробности

  • Android Studio 3.1.4
  • Котлин версия: 1.2.60

задача

  • использование одной строки
  • минимальный код
  • использовать предложения от компилятора

Шаг 1. Применение ()

Получить ссылку на контекст вашего приложения

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

}

Шаг 2. Добавьте расширение int

inline fun Int.toLocalizedString(): String = MY_APPLICATION_NAME.getAppContext().resources.getString(this)

Применение

strings.xml

<resources>
    <!-- .......  -->
    <string name="no_internet_connection">No internet connection</string>
    <!-- .......  -->
</resources>

Получить строковое значение:

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

Результаты

введите описание изображения здесь введите описание изображения здесь

Василий Боднарчук
источник
1

пока ты пишешь R. вы ссылаетесь на R.javaкласс, созданный eclipse, используете getResources().getString()и передаете idресурс, из которого вы пытаетесь читать, внутри getString()метода.

Пример : String[] yourStringArray = getResources().getStringArray(R.array.Your_array);

Гиридхар Карник
источник
0

**

Я надеюсь, что этот код полезен

**

String user = getResources().getString(R.string.muser); 
Дхирадж Какран
источник
0

Обновить

  • Вы можете использовать getString(R.string.some_string_id)в обоих Activityили Fragment.
  • Вы можете использовать Context.getString(R.string.some_string_id)там, где у вас нет прямого доступа к getString()методу. Как Dialog.

Проблема в том, что у вас нет Contextдоступа , как в вашем Utilклассе.

Предположим ниже метод без контекста.

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

Теперь вы будете передавать Contextв качестве параметра в этом методе и использоватьgetString().

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

Что я делаю

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

Какая? Это очень просто использовать в любом месте вашего приложения!

Итак, вот уникальное решение Bonus, с помощью которого вы можете получить доступ к ресурсам из любой точки мира 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;
    }

}

Добавьте поле имени к вашему manifest.xml <applicationтегу.

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

Теперь тебе пора.

Khemraj
источник
0

getString (R.string.your_string) получить результат

Бишт Лалит
источник
0

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

Теперь ваша строка скопирована в myString. Я надеюсь, что это будет работать для вас.

KAbhijeet21
источник
0

Вы можете непосредственно прочитать значение, определенное в strings.xml:

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

и установить в переменную:

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

но мы можем определить строку в представлении:

<TextView
    android:id="@+id/myTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello"/>
Jorgesys
источник