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

Android中strings.xml存储分数字符解码为分数符号的实现机制问询

Android strings.xml中编码分数字符的显示方案

问题根因

你当前的写法无法正常显示分数的核心原因是:
CDATA标签包裹的内容会被Android资源读取器原样返回,不会自动解析其中的HTML实体编码(你写的⅓是HTML实体格式,对应1/3,¼对应1/4,½才对应1/2),所以你拿到的字符串是原始的编码文本,自然无法显示为分数字符。


可行解决方案

方案1:直接写入Unicode分数字符(最推荐)

不需要额外编码和CDATA标签,直接把分数字符写入strings.xml即可,原有读取代码不需要任何修改:

<string-array name="array_fractionals">
    <item>0</item>
    <item>½</item> <!-- 对应1/2,Unicode U+00BD -->
    <item>⅕</item> <!-- 对应1/5,Unicode U+2155 -->
    <item>⅛</item> <!-- 对应1/8,Unicode U+215B -->
</string-array>

直接调用原有代码即可正常显示:

String[] array_frac=getResources().getStringArray(R.array.array_fractionals);
numberPickerTwo.setDisplayedValues(array_frac);

方案2:保留HTML实体写法的适配方式

如果坚持要用HTML实体编码存储,读取后需要主动解析HTML实体:

String[] array_frac = getResources().getStringArray(R.array.array_fractionals);
CharSequence[] displayValues = new CharSequence[array_frac.length];
for (int i = 0; i < array_frac.length; i++) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        displayValues[i] = Html.fromHtml(array_frac[i], Html.FROM_HTML_MODE_COMPACT);
    } else {
        displayValues[i] = Html.fromHtml(array_frac[i]);
    }
}
numberPickerTwo.setDisplayedValues(displayValues);

补充注意事项

  • 罕见分数字符可能存在系统字体不兼容的情况,遇到显示异常可以回退为1/2这类斜杠写法,兼容性最好。

内容的提问来源于stack exchange,提问作者judy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:36:00