LINUX.ORG.RU

Сообщения ddmytrenko

 

Android: Как загрузить ресурсы налету (on runtime)

Привет, ЛОР!

Мне нужна помощь в следующем вопросе. Как создать Toast c некоторым сообщением, прочитав его налету из, например, values/strings.xml?

Я пишу многоязычное приложение, а ресурсы в Android - прекрасный инструмент для автоматической локализации. Например я обслуживаю две локализации en_GB (стандартно values/strings.xml) и ru_RU (values-ru/strings.xml). Теперь мне бы хотелось поттягивать сообщения для пользователя в зависимости от его настроек локализации.


К примеру, создадим следующие ресурсы

values/strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="str_example">String example</string>
</resources>


values-ru/strings.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- russian alternative -->
<resources>
    <string name="str_example">Строка для примера</string>
</resources>


Я пробовал разные способы доступа к ресурсам типа String:


Пример 1.

Toast.makeText(this,
    getResources().getString(R.string.str_example),
    Toast.LENGTH_LONG).show();


Пример 2. (после гугльошки)

int resID = getResources().getIdentifier(
        "str_example",
        "string",
        getPackageName());
Toast.makeText(this,
    getResources().getString(resID),
    Toast.LENGTH_LONG).show();


После запуска получаю один и тот же результат - приложение посыпалось.


P.S. Также перепробовал все известные мне контексты:
1) this
2) CurrentActivity.this
3) Передавал Context параметром в функцию
4) getApplicationContext()
5) getBaseContext()

ddmytrenko
()

Android: Как загрузить ресурсы налету (on runtime)

Привет, ЛОР!

Мне нужна помощь в следующем вопросе. Как создать Toast c некоторым сообщением, прочитав его налету из, например, values/strings.xml?

Я пишу многоязычное приложение, а ресурсы в Android - прекрасный инструмент для автоматической локализации. Например я обслуживаю две локализации en_GB (стандартно values/strings.xml) и ru_RU (values-ru/strings.xml). Теперь мне бы хотелось поттягивать сообщения для пользователя в зависимости от его настроек локализации.


К примеру, создадим следующие ресурсы

values/strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="str_example">String example</string>
</resources>


values-ru/strings.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- russian alternative -->
<resources>
    <string name="str_example">Строка для примера</string>
</resources>


Я пробовал разные способы доступа к ресурсам типа String:


Пример 1.

Toast.makeText(this,
    getResources().getString(R.string.str_example),
    Toast.LENGTH_LONG).show();


Пример 2. (после гугльошки)

int resID = getResources().getIdentifier(
        "str_example",
        "string",
        getPackageName());
Toast.makeText(this,
    getResources().getString(resID),
    Toast.LENGTH_LONG).show();


После запуска получаю один и тот же результат - приложение посыпалось.


P.S. Также перепробовал все известные мне контексты:
1) this
2) CurrentActivity.this
3) Передавал Context параметром в функцию
4) getApplicationContext()
5) getBaseContext()

ddmytrenko
()

RSS подписка на новые темы