我正在考虑使用 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/