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

Android开发如何批量读取strings.xml中多个字符串资源存入列表

Android批量读取strings.xml字符串资源的实现方案

你的代码无法运行有两个核心问题:

  1. R.string.xxx是编译期生成的Int类型常量,无法直接通过字符串名称拼接拿到对应的ID
  2. 循环内部重复初始化specArray,会清空之前已经添加的内容,逻辑完全错误

你可以通过以下两种方式实现需求:

方案1:动态获取资源ID(适合需要按规则拼接资源名的场景)

用Android系统提供的resources.getIdentifier方法,可以通过资源名的字符串、资源类型、应用包名动态获取到对应的资源ID,再读取字符串即可,示例代码如下:

val specArray = mutableListOf<String>()
// Activity中可以直接获取当前应用的包名
val packageName = packageName
// 按你需要的数量遍历,比如你的资源名是specC1、specC2...specC36
for (index in 1..36) {
    val resName = "specC$index"
    // 参数顺序:资源名称、资源类型、应用包名,找不到资源会返回0
    val resId = resources.getIdentifier(resName, "string", packageName)
    // 判空避免资源不存在导致崩溃
    if (resId != 0) {
        specArray.add(getString(resId))
    }
}

注意:该方法是运行时查找资源,性能略低于直接引用R常量,资源名拼写错误不会在编译期报错,需要做好校验

方案2:使用字符串数组资源(官方推荐,更稳定)

Android原生支持批量存储字符串的string-array资源,是官方推荐的同类型批量字符串管理方案,编译期即可校验资源合法性,性能更高。

  1. 首先在res/values/strings.xml中定义数组:
<string-array name="spec_array">
    <item>@string/string1</item>
    <item>@string/string2</item>
    <item>@string/string3</item>
    <item>@string/string4</item>
    <!-- 所有需要的字符串按顺序加到这里即可 -->
</string-array>
  1. Activity中直接读取转成可变列表:
val specArray = resources.getStringArray(R.array.spec_array).toMutableList()

优势:不需要处理动态查找的异常,后续新增/删除资源只要修改XML数组即可,代码不需要改动


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:39:05