我想有2种语言的UI和单独的字符串值为他们在我的资源文件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。

为什么它对我没用?


当前回答

如果你想把它放到一个activity或fragmnet中,那么:

getContext().getResources().getString(R.string.string_name);

如果你想从activity或fragment之外的类中获取它,在那里你没有activity context,那么使用application context:

getApplicationContext().getResources().getString(R.string.string_name);

其他回答

不仅仅来自活动:

public static String getStringByIdName(Context context, String idName) {
    Resources res = context.getResources();
    return res.getString(res.getIdentifier(idName, "string", context.getPackageName()));
}

如果你没有Activity引用,你可以这样使用你的上下文:

getContext().getString(R.string.your_string_name);
getResources().getString(getResources().getIdentifier("propertyName", "string", getPackageName()))

getResources()只在Activity或Fragment类中工作。

为了在任何地方访问字符串资源,

use:

Resources.getSystem().getString(android.R.string.somecommonstuff)
R.string.<string_name>

在java文件中直接使用这一行。保持简单。