【问题标题】:Android get String Resource Id from valueAndroid 从值中获取字符串资源 ID
【发布时间】:2021-08-28 19:37:57
【问题描述】:

是否可以从String值中获取strings.xml中指定的String Resource Id?

    <string name="text1">Dummy Text</string>

我知道如何从字符串值(虚拟文本)中获取资源 ID(文本 1),但我想从字符串值(虚拟文本)中获取资源 ID(文本 1)?以下是我获取 Dummy Text 的方法:但我想从 Dummy Text 值中获取 text1(Resource Id)?

    context.resources.getIdentifier("text1","string",BuildConfig.APPLICATION_ID)

【问题讨论】:

  • 你能改写你的问题吗?现在真的没有意义:)
  • 您可以使用字符串方法。 substring() 和 indexof()
  • 我想我的问题现在更清楚了:)

标签: java android-studio kotlin


【解决方案1】:

我认为您正在寻找的是以下使用反射的函数:

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”。

函数甚至可以稍作改动,返回“Dummy Text”对应的资源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 的信息(后面的数字只是一个示例)。

【讨论】:

    最近更新 更多