You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中getQuantityString处理quantity=one时仅显示部分字符串问题

问题根源:复数字符串资源的额外引号导致解析异常

你遇到的问题核心出在strings.xml中plurals的item内容格式错误——你给quantity="one"对应的item内容额外套了一层双引号,这会让Android资源解析器把引号当成字符串的一部分,进而引发解析错误,最终只显示了引号内文本的最后一个单词。

修复步骤

  1. 修正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传入参数即可。

  2. 确认代码调用逻辑保持不变
    你当前在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:59:28