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
相关产品推荐
相关产品推荐

