як читати значення з string.xml в android?


368

Я написав рядок:

String Mess = R.string.mess_1 ;

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

Відповіді:


807

Спробуйте це

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


87
ви можете спростити це, this.getString(R.string.some_id)якщо ви вже користуєтесь Context(Діяльність або Служба).
Маттіас

Я використав це: String message + = getResources (). GetString (R.string.string1) + "ще кілька слів ..."; і я хотів надіслати цей рядок через sms, але він не працює. Це добре працює без рядкового ресурсу. Я щось пропускаю?
keybee

9
Ви можете ще більше спростити це до getString (R.string.some_id). І якщо ви хочете налаштувати рядок, ви можете зробити рядок на кшталт "Ласкаво просимо,% 1 $ s", тоді можна використовувати getString (R.string.some_id, "John Doe"). щоб отримати "Ласкаво просимо, Джон Доу" під час виконання.
M Granja

Також працює для інших типів, таких як я щойно використовував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коли ви перебуваєте в розділі Діяльність. Просто getString()дозволить вам робити справи.
CopsOnRoad

43

Я використовую це:

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

10
Попередження - відповідно до цієї відповіді, цитуючи документацію Android, використання Resources.getSystem()не дає вам ресурсів програми, а лише андроїд. Його не слід використовувати для таких ресурсів 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"

Ця відповідь повинна бути там. Більшість часу ви читаєте масиви з XML не з одиночних рядків.
Ojonugwa Jude Ochalifu


6

Рішення 1

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

Рішення 2

String mess = getString(R.string.mess_1)

3

У фрагментах ви можете використовувати

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

3

Якщо ви хочете додати значення рядка до кнопки, наприклад, просте використання

android:text="@string/NameOfTheString"

Визначений текст у strings.xml виглядає приблизно так:

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

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


1

Якщо ви займаєтесь діяльністю, яку можете використовувати

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

Якщо ви не є діяльністю, скористайтеся цим:

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

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

Оновлення

  • Ви можете використовувати 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)
}

Що? Це дуже просто використовувати в будь-якому місці вашого додатка!

Отже, ось унікальне бонусне рішення, за допомогою якого ви можете отримати доступ до ресурсів з будь-якого місця 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>

Тепер вам добре піти.



0

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

Тепер ваш рядок скопійовано в myString. Сподіваюся, це спрацює для вас.


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"/>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.