Android:我如何从使用名字的资源获取字符串?

我希望为用户界面使用两种语言,并在我的资源文件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

为什么它不适用于我的情况?


您所指的链接似乎适用于运行时生成的字符串。 strings.xml中的字符串不会在运行时创建。 你可以通过

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

getResources()Context类的一个方法。 如果你在一个Activity或者一个Service (它扩展了Context),你可以像这个片段一样使用它。

还要注意整个语言依赖可以由android框架来处理 。 只需为每种语言创建不同的文件夹。 如果英语是您的默认语言,只需将英文字符串放入res/values/strings.xml 。 然后创建一个新文件夹values-ru ,并将具有相同名称的俄语字符串放入res/values-ru/strings.xml 。 从这一点上,android会根据设备区域设置为您选择正确的一个,无论是在调用getString()还是在通过@string/mystring在XML中引用字符串时。 来自res/values/strings.xml是fallback的,如果你没有覆盖用户区域的文件夹,这个文件夹将被用作默认值。

请参阅本地化和提供资源以获取更多信息。


我也有同样的问题。 但下面的代码适用于我:验证packageName是否正确。 你必须引用你的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()));
    }
链接地址: http://www.djcxy.com/p/23713.html

上一篇: Android: How do I get string from resources using its name?

下一篇: How to read embedded resource text file