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.



Почему это не работает в моем случае?

1787   11  

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()));
    }
getResources().getString(getResources().getIdentifier("propertyName", "string", 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.

String myString = getString (R. string.mystring);

легко

Comments

    Ничего не найдено.