integer.xml仅支持单个整型常量,定义整型数组必须使用arrays.xml中的标签,通过getresources().getintarray(r.array.xxx)读取。

integer.xml 里不能定义整型数组
Android 的 integer.xml 只支持单个整型常量,用 <integer name="xxx">123</integer> 形式。它不支持数组——哪怕你写成多个 <integer></integer> 标签,系统也只会当一堆独立资源处理,没法通过一个 ID 一次性取出来当数组用。
常见错误现象:Resources.getSystem().getIntArray(R.array.xxx) 报 NotFoundException,或者运行时返回 null,就是因为误把 integer.xml 当成了数组容器。
- 真正定义整型数组的文件是
arrays.xml(放在res/values/下) - 数组必须用
<integer-array name="xxx"></integer-array>根标签 - 每个元素用
<item>42</item>,不能用<integer></integer>
正确写法:用 arrays.xml 定义整型数组
在 res/values/arrays.xml 中写:
<resources>
<integer-array name="page_timeout_ms">
<item>3000</item>
<item>5000</item>
<item>8000</item>
</integer-array>
</resources>
Java 中读取:getResources().getIntArray(R.array.page_timeout_ms);Kotlin 同理。R.array.xxx 是自动生成的 ID,和 R.integer.xxx 完全不同类目。
- 注意命名空间:
integer-array对应R.array,不是R.integer -
getIntArray()返回int[],不是List<integer></integer>,别试图调用stream()或size() - 数组长度上限由系统限制(通常几万项没问题),但过长会拖慢资源加载,建议拆分或改用代码构造
为什么不用 dimen.xml 或 colors.xml 替代?
有人试过把数字塞进 dimen.xml(比如 <dimen name="timeout_1">3000dp</dimen>),再用 getDimensionPixelSize() 转——这能跑通,但语义错乱、单位污染、IDE 无法校验类型。
-
dimen是为尺寸设计的,单位(dp、sp)会被换算,3000dp 在不同屏幕可能变成 3000、4500、6000 像素值 -
color强制十六进制或 RGB,根本存不了纯数字 -
string-array虽能存数字字符串,但要额外Integer.parseInt(),白费性能还可能抛异常
动态生成整型数组?别绕远路
如果数组内容依赖运行时逻辑(比如从 SharedPreferences 读配置),就别硬塞进 XML。XML 是静态资源,编译期固化,改了要重打包。
- 直接在代码里 new
int[]{1, 2, 3},或用Arrays.copyOf()构造 - 需要复用?抽成 static 工具方法,比 XML + 反射读取更轻、更可控
- 真要“配置化”?用 JSON 文件放
assets/或res/raw/,运行时解析,别强求 XML 覆盖所有场景
整型数组资源这件事,边界很清晰:静态、固定、多处共用 → arrays.xml;其余情况,代码里造。










