如何在Android的strings.xml字符串数组中使用运行时统一占位符?
直接用实现占位符批量替换的方案
完全可以直接通过字符串数组实现你的需求,无需拆分单个<string>,具体操作如下:
1. 保留strings.xml中的写法
你的原始写法完全可行,直接保留即可:
<string-array name="distance_rating_labels"> <item>< 5 %s</item> <item>< 10 %s</item> <item>< 15 %s</item> </string-array>
其中%s是用于后续替换单位的占位符,XML里的<是小于号的转义字符,最终会正常显示为<。
2. 运行时批量替换占位符
在Android代码中,先获取整个字符串数组,再遍历每个元素用String.format()替换占位符为目标单位(如km或miles):
Kotlin 实现示例:
// 获取原始字符串数组 val originalLabels = resources.getStringArray(R.array.distance_rating_labels) // 定义要使用的距离单位 val targetUnit = "km" // 可替换为 "miles" // 批量替换生成带单位的新数组 val formattedLabels = originalLabels.map { String.format(it, targetUnit) }.toTypedArray()
Java 实现示例:
// 获取原始字符串数组 String[] originalLabels = getResources().getStringArray(R.array.distance_rating_labels); // 定义要使用的距离单位 String targetUnit = "km"; // 可替换为 "miles" // 批量替换生成带单位的新数组 String[] formattedLabels = new String[originalLabels.length]; for (int i = 0; i < originalLabels.length; i++) { formattedLabels[i] = String.format(originalLabels[i], targetUnit); }
处理完成后,formattedLabels中的元素就会变成< 5 km、< 10 miles这类符合需求的文本。
内容的提问来源于stack exchange,提问作者Shahal
相关产品推荐
相关产品推荐

