java - Android - 如何从字符串资源中获取名称中包含两个或多个相似单词的所有元素

标签 java android string resources

我正在考虑使用 Android 的资源,并且我想从 strings.xml 文件中获取包含单词“menu”的所有元素,所有这些都是为了管理多部分翻译。

我的 XML 是这样的

<resources>
<string name="app_name">MyApp</string>
<string name="usage_analytics">Show Analytics</string>
<string name="option_resume">Resume</string>
<string name="option_analisys">Analysis</string>
<string name="option_categories">Categories</string>
<string name="option_settings">Settings</string>

为此,我想获取名称中包含“选项”一词的所有元素。在我的示例中,我想获取 option_resume、option_analysis、option_categories 和 option_settings

在这种情况下,我发现建议手动制作,例如 GetString(R.string.option_resume)、GetString(R.string.option_analisys)、GetString(R.string.option_categories)、GetString(R.string.option_settings) )等

但对于这种情况,我必须使其动态获取所有具有确定单词且没有字符串数组资源的项目。

对此有什么想法吗?

最佳答案

But for this case i have to make it dinamically obtaining all the items which have a determinated word

您不需要动态地执行此操作。资源在编译时是已知的。一组新资源不会以新前缀神奇地出现在您的应用中。

without a String array resource

string-array 资源将是明智的做法。我不太确定你为什么不想使用它。鉴于上面现有的 strings.xml,有一个 arrays.xml 包含:

<string-array name="options">
  <string>@string/option_resume</string>
  <string>@string/option_analisys</string>
  <string>@string/option_categories</string>
  <string>@string/option_settings</string>
</string-array>

然后,在运行时请求 options 字符串数组将为您提供所需的字符串。

如果您关心的是手动维护该 arrays.xml 文件,请自己编写一些代码来生成它作为构建的一部分(例如,自定义 Gradle 任务、自定义 Gradle 插件)。

执行此操作的缓慢而草率的方法是使用 Java 反射来迭代应用的 R 类的所有 R.string 字段,找到它们的名称,请参阅哪些匹配,然后使用 getString() 获取相应的字符串值。

关于java - Android - 如何从字符串资源中获取名称中包含两个或多个相似单词的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44307544/

相关文章:

Android Studio 模拟器 - Ubuntu 16.04 LTS

javascript - 在 HTML5 Javascript 中将 BlobBuilder 转换为字符串

java - 在使用 java.util.concurrent 类时,我应该同步以避免可见性问题吗?

java - 不支持的字符集异常 : Cp1027 with DB2 JDBC Driver

java - Java中的流、缓冲区

java - 在整个字符串中插入一个字符

php - "Unique 7 character string"- 相关问题

Java 类路径 - Linux

Android Phonegap/Webkit/Viewport 位置固定

c# - Xamarin : Testing Android application using Moq/NUnit and the MockContext?