0

0

Android arrays.xml字符串数组 资源文件中定义列表数据

煙雲

煙雲

发布时间:2026-03-13 13:03:35

|

143人浏览过

|

来源于php中文网

原创

arrays.xml中定义字符串数组必须使用<string-array>标签,且需置于res/values/下、name属性合法、item数量多语言严格一致,读取时须判空,不支持HTML渲染与换行符。

android arrays.xml字符串数组 资源文件中定义列表数据

arrays.xml 里定义字符串数组必须用 <string-array> 标签

Android 的 arrays.xml 不是随便写个 XML 就能被识别为资源数组——系统只认 <string-array><integer-array><array> 这三种根标签。写成 <resources> 下直接放一堆 <item>,或者套了个自定义标签(比如 <my_list>),运行时 Resources.getIdentifier() 找不到,getResources().getStringArray(R.array.xxx) 直接抛 NotFoundException

实操建议:

  • arrays.xml 必须放在 res/values/ 目录下(不能放 values-zh 之类限定目录里,除非你明确要按配置分组)
  • 每个数组必须有唯一 name 属性,且只能含字母、数字、下划线,不能以数字开头
  • <item> 内容支持引用其他字符串资源(如 @string/app_name),但不支持拼接或表达式

在 Java/Kotlin 中读取字符串数组要防空指针和越界

getStringArray(R.array.xxx) 返回的是 String[],不是 ArrayListlistOf,它不会自动判空,也不会做长度校验。如果资源 ID 错了、数组没定义、或编译时资源未打包进去,方法直接返回 null —— 后续调用 .length 或遍历就会崩。

实操建议:

  • 读取后立刻判空:val items = resources.getStringArray(R.array.my_list); if (items == null) return
  • 需要转 List 时用 Arrays.asList(items),但注意它返回的是固定大小列表,add() 会抛 UnsupportedOperationException
  • 不要在 onCreate() 之前调用(比如静态块里),resources 尚未初始化

字符串数组不支持带格式的 HTML 文本

你可能想在数组里写 <b>重要</b> ,指望显示加粗或空格——不行。getStringArray() 返回的是纯字符串,XML 实体(如 )会被解码,但 HTML 标签本身不会被渲染。系统把它当普通文本处理,<code><b> 就真的显示成 “<b>重要</b>” 四个字符。

歌者PPT
歌者PPT

歌者PPT,AI 写 PPT 永久免费

下载

实操建议:

  • 真要富文本,改用 getTextArray()(返回 CharSequence[]),前提是原 <item> 里用 <![CDATA[...]]> 包裹,并确保内容是合法 HTML(Android 支持有限,仅 <b><i><u> 等基础标签)
  • 更稳妥的做法:数组里只存纯文本,样式逻辑交由 UI 层控制(比如用 SpannableStringBuilder 动态加粗)
  • 别在 <item> 里写换行符 \n,XML 解析会吃掉它;要用换行,写成 或直接在 CDATA 里用真实回车

多语言适配时 arrays.xml 不能靠文件名自动切换

很多人以为把 arrays.xml 复制一份到 values-zh-rCN/ 就能自动切中文数组——其实可以,但有个硬限制:所有同名数组(比如都叫 my_list)必须有**完全相同的 item 数量**。少一个、多一个,编译不报错,但运行时在某些机型上 getStringArray() 可能返回 null 或截断数据。

实操建议:

  • 不同语言版本的 <string-array name="xxx"><item> 个数必须严格一致(哪怕某语言里某个项留空,也得写个空 <item></item>
  • 避免用数组存“开关类”数据(比如 ["开启", "关闭"]),因为中英文词序可能不同,UI 布局容易错位;优先用单个字符串资源 + 逻辑判断
  • 如果数组内容差异大(比如中文 5 项、英文 7 项),别硬凑,拆成多个小数组,用代码组合
字符串数组看着简单,但资源加载时机、多语言对齐、HTML 解析边界这些地方,一不留神就掉坑里。最常被忽略的是:它不支持动态生成,也不参与构建时的资源压缩(shrinkResources true 不会删它),所以冗余数组会白占 APK 体积。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Kotlin协程编程与Spring Boot集成实践
Kotlin协程编程与Spring Boot集成实践

本专题围绕 Kotlin 协程机制展开,深入讲解挂起函数、协程作用域、结构化并发与异常处理机制,并结合 Spring Boot 展示协程在后端开发中的实际应用。内容涵盖异步接口设计、数据库调用优化、线程资源管理以及性能调优策略,帮助开发者构建更加简洁高效的 Kotlin 后端服务架构。

126

2026.02.12

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1031

2023.08.02

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

254

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1089

2024.03.01

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

847

2023.08.22

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1949

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2119

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

1171

2024.11.28

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号