Android字符串文件中用CDATA和<br/>添加连续换行不生效怎么办
为什么CDATA内连续
<br/>无法实现多行换行 核心原因和CDATA标签无关,是Android 原生Html.fromHtml() API的解析规则限制:该API默认会将连续的多个<br/>标签判定为冗余内容,自动合并仅保留1个换行效果,这是系统HTML解析器的固有设计,所以你写的连续两个<br/>最终只会生效一个,甚至部分场景下首尾的<br/>会被直接忽略,才会出现你遇到的所有换行挤在一起的情况。
可行的解决方法
- 方案1:用非换行空格占位,在连续的
<br/>中间插入 ,修改后的字符串资源如下:
<string name="message"> <![CDATA[menu:<br/> <br/>1.One item<br/>2.Two item<br/> <br/>Done]]> </string>
插入的 会被解析为一个空白字符,不会影响显示效果,同时可以阻止解析器合并前后的<br/>标签。
- 方案2:放弃使用HTML标签换行,直接用原生字符串换行符
\n,XML中需要转义为\\n,或者直接在CDATA内输入真实回车换行,解析时不需要调用Html.fromHtml(),直接拿字符串设置给TextView即可,这种方式更稳定,没有解析合并的问题。 - 方案3:如果需要保留HTML标签的其他能力,也可以在两个
<br/>之间插入空的<span></span>标签,同样可以避免被解析器合并。
内容的提问来源于stack exchange,提问作者Amal p
相关产品推荐
相关产品推荐

