Я хотел бы иметь 2 языка для пользовательского интерфейса и отдельные строковые значения для них в моем файле ресурсов res\values\strings.xml
:
<string name="tab_Books_en">Books</string>
<string name="tab_Quotes_en">Quotes</string>
<string name="tab_Questions_en">Questions</string>
<string name="tab_Notes_en">Notes</string>
<string name="tab_Bookmarks_en">Bookmarks</string>
<string name="tab_Books_ru">Книги</string>
<string name="tab_Quotes_ru">Цитаты</string>
<string name="tab_Questions_ru">Вопросы</string>
<string name="tab_Notes_ru">Заметки</string>
<string name="tab_Bookmarks_ru">Закладки</string>
Теперь мне нужно получить эти значения динамически в моем приложении:
spec.setContent(R.id.tabPage1);
String pack = getPackageName();
String id = "tab_Books_" + Central.lang;
int i = Central.Res.getIdentifier(id, "string", pack);
String str = Central.Res.getString(i);
Моя проблема в том i = 0
.
Почему это не работает в моем случае?
en
илиru
?Ответы:
Ссылка, на которую вы ссылаетесь, похоже, работает со строками, сгенерированными во время выполнения. Строки из strings.xml не создаются во время выполнения. Вы можете получить их через
getResources()
это методContext
класса. Если вы находитесь внутри aActivity
или aService
(что расширяет контекст), вы можете использовать его как в этом фрагменте.Также обратите внимание, что вся языковая зависимость может быть решена с помощью платформы Android . Просто создайте разные папки для каждого языка. Если английский является вашим языком по умолчанию, просто поместите английские строки в
res/values/strings.xml
. Затем создайте новую папкуvalues-ru
и поместите русские строки с одинаковыми именами вres/values-ru/strings.xml
. С этого момента Android выбирает правильный в зависимости от локали устройства для вас, когда вы звонитеgetString()
или когда ссылаетесь на строки в XML через@string/mystring
. Те из нихres/values/strings.xml
являются запасными, если у вас нет папки, охватывающей язык пользователя, эта будет использоваться в качестве значений по умолчанию.См. Локализация и предоставление ресурсов для получения дополнительной информации.
источник
android.support.v4.app.Fragment
, вы можете просто позвонитьgetString(R.string.mystring)
напрямую.У меня такая же проблема. Но этот код ниже работает для меня: Проверьте правильность вашего packageName. Вы должны обратиться к корневому пакету вашего приложения Android.
источник
string
и нетstrings
. Потому что это логично (как и в остальной части Android). Итак, спасибо за это (и больше), @leonvian. :-)String someStringFromXML = getString(getResources().getIdentifier("some_string_name", "string", getPackageName()));
.Не только от деятельности:
источник
источник
Я бы добавил что-то к решению leonvian, так что, если по какой-либо причине строка не найдена среди ресурсов (возвращаемое значение 0, которое не является допустимым кодом ресурса), функция может что-то вернуть:
источник
Лучший подход
App.getRes().getString(R.string.some_id)
Будет работать везде (Utils, Models также).
Я прочитал все ответы, все ответы могут сделать вашу работу.
getString(R.string.some_string_id)
в обоихActivity
илиFragment
.Context.getString(R.string.some_string_id)
там, где у вас нет прямого доступа кgetString()
методу. КакDialog
.проблема
Когда у вас нет
Context
доступа , как метод в вашемUtil
классе.Предположим ниже метод без контекста.
Теперь вы будете передавать
Context
в качестве параметра в этом методе и использоватьgetString().
Что я делаю
Какая? Это очень просто использовать в любом месте вашего приложения!
Итак, вот решение, с помощью которого вы можете получить доступ к ресурсам из любой точки мира
Util class
.Добавьте поле имени к вашему
manifest.xml
<application
тегу.Теперь вы готовы идти. Используйте в
App.getAppResources().getString(R.string.some_id)
любом месте приложения.источник
getResourses
, этоgetResources
приведет к переопределению. Также шаблон синглтона кажется ненужным, возможно, его можно пропустить. Любые проблемы с утечкой памяти с этим решением?Проще всего использовать эту
getString()
функцию в упражнении.Ссылка: http://developer.android.com/guide/topics/resources/string-resource.html
Я думаю, что эта функция добавлена в последней версии Android, любой, кто знает историю, может прокомментировать это.
источник
Простой способ получить строку ресурса из строки в TextView. Здесь resourceName - это имя ресурса.
источник
Если у вас нет ссылки на Activity, вы можете использовать свой контекст следующим образом:
источник
Существует также набор предопределенных строк Android, таких как «Ok», «Cancel» и многие другие - так что вам не нужно объявлять все. Они доступны просто:
(В этом случае строка «Ok»). Кстати, есть и другие ресурсы Android, такие как, например, изображения значков и т. Д.
источник
String myString = getString (R.string.mystring);
Простой способ
источник
Вы можете попробовать это в Деятельности:
В других ситуациях, таких как фрагменты, ... используйте
источник
Для безопасности вы должны добавить: mContext.getResources (). GetString (R.string.your_string);
mContext может быть: контекст в onAttach () Fragment или this of Activity.
источник
Если вы хотите получить его внутри действия или фрагмента, то:
Если вы хотите получить его из класса вне действия или фрагмента, где у вас нет контекста действия, используйте контекст приложения:
источник
Используйте эту строку прямо в вашем Java-файле. Будь проще.
источник