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

Android:获取strings.xml中string-array名称及相关配置疑问

Android String-Array 资源相关问题解答

原配置:

<string-array name="color">
    <item>red</item>
    <item>green</item>
    <item>purple</item>
</string-array>

1. 如何通过Java获取该string-array的名称(得到"color"字符串)?

Android资源系统并没有直接提供获取string-array名称的API,因为资源ID编译后是整型常量,和名称的映射是单向的。如果要获取名称,有两种可行方式:

  • 手动维护映射表:用HashMap<Integer, String>把R.array.color和"color"关联起来,需要时直接查表调用。
  • 反射获取:借助Resources类的getResourceEntryName()方法,传入对应string-array的资源ID即可:
String arrayName = getResources().getResourceEntryName(R.array.color);
// 此时arrayName的值就是"color"

2. 如何将其名称提取为string资源,实现类似<string-array name="@string/color">的配置?

这种写法是不合法的,Android资源的name属性只能是硬编码的标识符,不能引用其他string资源。编译时系统会直接报错,因为资源名称是生成R类常量的依据,必须是固定字符串,无法动态引用。

如果想统一管理名称,只能在代码层定义常量,比如public static final String COLOR_ARRAY_NAME = "color";,但没法在XML里用@string/xxx作为array的name属性。

3. 将该string-array的所有项提取为独立string资源是否冗余?

是否冗余完全看实际使用场景:

  • 如果这些颜色名称只在这个string-array里用,没有其他地方单独引用,那提取成独立string资源确实是冗余,只会增加维护成本。
  • 如果这些颜色名称在其他地方也会单独调用(比如某个TextView直接显示"red"),或者需要多语言适配(不同语言下颜色名称有不同翻译),那提取成独立string资源就很有必要——既能保证内容一致性,也方便统一修改。

举个实用场景:如果App支持中英文切换,中文下"red"要显示"红色",把每个项提取成独立string资源后,只需在values-zh目录下修改对应string内容即可,不用改动array配置,维护效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 12:36:32