Android: Как получить строку из ресурсов, используя ее имя?
Я хотел бы иметь 2 языка для пользовательского интерфейса и отдельные строковые значения для них в моем файле ресурсов resvaluesstrings.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.
Почему это не работает в моем случае?
11 ответов:
ссылка, на которую вы ссылаетесь, похоже, работает со строками, созданными во время выполнения. Строки из строк.xml не создаются во время выполнения. Вы можете получить их через
String mystring = getResources().getString(R.string.mystring);
getResources()методContextкласса. Если вы находитесь внутриActivityилиService(которые расширяют контекст) вы можете использовать его как в этом фрагменте.и обратите внимание, что вся языковая зависимость может быть решена с помощью Android framework. Просто создайте различные папки для каждого языка. Если английский язык является вашим языком по умолчанию, просто поместите английские строки в
res/values/strings.xml. Затем создайте новую папкуvalues-ruи поставить русские строки с одинаковыми именами вres/values-ru/strings.xml. С этого момента android выбирает правильный в зависимости от локали устройства для вас, либо при вызовеgetString()или при ссылке на строки в XML через@string/mystring. Те, что изres/values/strings.xmlявляются резервными, если у вас нет папки, охватывающей пользователей язык, это будет использоваться в качестве значения по умолчанию.посмотреть локализация и Выделение Ресурсов для получения дополнительной информации.
У меня та же проблема. Но этот код ниже работает для меня: Проверьте правильность имени пакета. Вы должны обратиться к корневому пакету вашего приложения для Android.
private String getStringResourceByName(String aString) { String packageName = getPackageName(); int resId = getResources().getIdentifier(aString, "string", packageName); return getString(resId); }
не только от деятельности:
public static String byIdName(Context context, String name) { Resources res = context.getResources(); return res.getString(res.getIdentifier(name, "string", context.getPackageName())); }
Я бы добавил что-то к решению leonvian, поэтому, если случайно строка не найдена среди ресурсов (возвращаемое значение 0, то есть недопустимый код ресурса), функция может вернуть что-то:
private String getStringResourceByName(String aString) { String packageName = getPackageName(); int resId = getResources() .getIdentifier(aString, "string", packageName); if (resId == 0) { return aString; } else { return getString(resId); } }
проще всего использовать
getString()функции в деятельности.String myString = getString(R.string.mystring);Ссылка:http://developer.android.com/guide/topics/resources/string-resource.html
Я думаю, что эта функция добавлена в последней версии Android, любой, кто знает историю, может прокомментировать это.
Если у вас нет ссылки на действие, вы можете использовать свой контекст следующим образом:
getContext().getString(R.string.your_string_name);
существует также набор предопределенные строки Android такие как" ОК"," Отмена " и многие другие - так что вам не нужно объявлять все. Они доступны, просто:
getString(android.R.string.ok)(в данном случае строка "Ok"). Кстати, есть и другие ресурсы Android, такие как, например, изображения значков и т. д.
простой способ получить строку ресурса из строки в TextView. Здесь resourceName-это имя ресурса
int resID = getResources().getIdentifier(resourceName, "string", getPackageName()); textview.setText(resID);
Лучший Уникальный Подход
и
App.getRes().getString(R.string.some_id)что будет работать везде в приложении.я прочитал все ответы, все ответы могут сделать свою работу.
- можно использовать
getString(R.string.some_string_id)какActivityилиFragment.- можно использовать
Context.getString(R.string.some_string_id)где у вас нет прямого доступа кgetString()метод. КакDialog.
Comments