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

标签 android string resources

我想在我的资源文件 res\values\strings.xml 中有两种语言的 UI 和单独的字符串值:

<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 类的方法。如果您在 ActivityService(扩展 Context)中,则可以像在此代码段中一样使用它。

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

LocalizationProviding Resources了解更多信息。

关于Android:如何使用名称从资源中获取字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7493287/

相关文章:

Android - 如何在 Firestore RecyclerView 适配器中实现多个 ViewHolder 一个用于标题布局,另一个用于模型布局

c++ - 迭代字符串中单词的最有效方法

python - 在 Python 单元测试和主代码中访问资源文件

css - 如何在 Hippo CMS 中包含 CSS 文件?

c# - 从字符串中删除以 SOT 开头并以 EOT 结尾的子字符串

cocoa - 什么是资源密集度较低的 : Bindings, KVO,或通知

java - 来自 "synchronized"的 NullPointerException

java - 从 Textview 选择文本时出错(java.lang.IndexOutOfBoundsException : setSpan (-1 . .. -1)在 0 之前开始)

android - 复合控制转发状态

java - 在多个字符处剪切 Java 字符串