Android中getQuantityString处理quantity=one时仅显示部分字符串问题
问题根源:复数字符串资源的额外引号导致解析异常
你遇到的问题核心出在strings.xml中plurals的item内容格式错误——你给quantity="one"对应的item内容额外套了一层双引号,这会让Android资源解析器把引号当成字符串的一部分,进而引发解析错误,最终只显示了引号内文本的最后一个单词。
修复步骤
修正strings.xml中的复数字符串
把plurals里的item内容的外层双引号去掉,正确的写法应该是:<resources> ... <plurals name="daily_day_number"> <item quantity="one">Displaying 1 day</item> <!-- 推荐通用写法:用%d适配动态数值,后续逻辑变动时无需修改资源 --> <!-- <item quantity="one">Displaying %d day</item> --> <item quantity="other">Displaying %d days</item> </plurals> </resources>如果你想让
one的场景也支持动态传入数值,推荐用带%d的版本,这样代码里的调用逻辑不需要区分场景,统一用getQuantityString传入参数即可。确认代码调用逻辑保持不变
你当前在initUiDaily()中的调用是正确的,不需要修改:dailyDaysDisplay.text = resources.getQuantityString(R.plurals.daily_day_number, displayedDays, displayedDays)第一个
displayedDays用于判断复数规则,第二个用于填充字符串中的%d占位符。
为什么会出现这个问题?
Android的XML资源文件中,<item>标签的内容是直接作为字符串值的,不需要额外用双引号包裹。当你添加了外层双引号后,解析器会把整个"Displaying 1 day"当成带引号的字符串,但在渲染TextView时,可能因为引号的存在触发了意外的解析逻辑(比如被当成了某种特殊标记),最终只显示了引号内的最后一个单词。
验证方法
修复strings.xml后,重新编译运行App:
- 当
displayedDays=1时,应该显示Displaying 1 day(或Displaying 1 day,取决于你用的是固定数值还是占位符版本) - 当
displayedDays>1时,正常显示Displaying X days
内容的提问来源于stack exchange,提问作者Blueprint
相关产品推荐
相关产品推荐

