You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据后端返回的字符串ID动态获取Android字符串资源?

实现根据后端返回的字符串ID动态获取Android字符串资源

需求可行性

完全可以实现,核心逻辑是通过资源名称动态查找对应的资源ID,再获取对应的字符串内容。

正确实现方式

1. 基础函数实现(需Context)

使用Resources.getIdentifier()方法根据资源名称匹配ID,再获取字符串:

fun getStringFromBeStringId(context: Context, beStringID: String): String {
    // 参数:资源名、资源类型(此处为string)、应用包名
    val resId = context.resources.getIdentifier(beStringID, "string", context.packageName)
    return if (resId != 0) {
        context.getString(resId)
    } else {
        // 资源不存在时的降级处理,可根据需求调整返回内容
        beStringID
    }
}

2. Compose 中的实现

在Compose中通过LocalContext获取上下文,结合remember缓存结果避免重复计算:

@Composable
fun getStringFromBeStringId(beStringID: String): String {
    val context = LocalContext.current
    return remember(beStringID) {
        val resId = context.resources.getIdentifier(beStringID, "string", context.packageName)
        if (resId != 0) context.getString(resId) else beStringID
    }
}

// 调用示例
@Composable
fun DynamicTextDemo() {
    Text(text = AnnotatedString(getStringFromBeStringId("test_one")))
}

注意事项

  • getIdentifier()返回0代表未找到对应资源,必须处理该场景,否则调用getString(0)会引发崩溃
  • 后端返回的字符串ID必须与资源文件中定义的name属性完全匹配(大小写敏感)
  • 若频繁调用该方法,建议提前将需要映射的资源名与ID存入HashMap缓存,getIdentifier()的查找效率低于直接引用R.string.xxx

内容的提问来源于stack exchange,提问作者BRDroid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 04:25:04