java - Android 从值中获取字符串资源 ID
问题描述
是否可以从字符串值中获取 strings.xml 中指定的字符串资源 ID?
<string name="text1">Dummy Text</string>
我知道如何从字符串值(虚拟文本)中获取资源 ID(文本 1),但我想从字符串值(虚拟文本)中获取资源 ID(文本 1)?以下是我获取虚拟文本的方法:但我想从虚拟文本值中获取 text1(Resource Id)?
context.resources.getIdentifier("text1","string",BuildConfig.APPLICATION_ID)
解决方案
我认为您正在寻找的是以下使用反射的函数:
fun getStringResourceName(stringToSearch: String): String? {
val fields: Array<Field> = R.string::class.java.fields
for (field in fields) {
val id = field.getInt(field)
val str = resources.getString(id)
if (str == stringToSearch) {
return field.name
}
}
return null
}
所以通过调用getStringResourceName("Dummy Text")
函数应该返回“text1”。
该函数甚至可以稍作更改以返回与“虚拟文本”对应的资源 id:
fun getStringResourceId(stringToSearch: String): Int {
val fields: Array<Field> = R.string::class.java.fields
for (field in fields) {
val id = field.getInt(field)
val str = resources.getString(id)
if (str == stringToSearch) {
return id
}
}
return -1
}
所以在这种情况下,通过调用getStringResourceId("Dummy Text")
你可以获得类似的东西2131886277
(后面的数字只是一个例子)。
推荐阅读
- javascript - JavaScript 循环选择选项
- mockito - rx java 和 Mockito 不工作
- java - 想将 java.util 库添加到 build.sbt 文件中
- php - 如何更改数组标题并将数组插入 PHPExcel 中的 MySQL 数据库?
- laravel - Laravel 数据库:如何“更改” UUID 列类型
- php - Woocommerce 注册 - 通过 OTP 验证电话号码
- hibernate - 多次成功请求后jdbc连接中断
- python - 运行列表列表中的元素总和
- sockets - 运行 MPI 时,有没有办法先执行顺序代码,然后运行并行代码
- r - 针对 NULL 和其他东西测试变量