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?