首页 > 解决方案 > 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)

标签: javaandroid-studiokotlin

解决方案


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

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(后面的数字只是一个例子)。


推荐阅读