Android中CDATA字符串内添加额外换行/间距的实现疑问
解决方法
在CDATA标签内直接实现换行和间距,核心是用HTML标准标签替代原生的\n——因为HtmlCompat.fromHtml解析的是HTML语法,原生换行符不会被识别为换行。具体有几种可行方案:
1. 用<br>标签实现空行
直接把字符串里的\n\n替换为两个<br>标签,就能生成额外的换行间距:
修改字符串资源:
<string name="my_string"><![CDATA[My string counts <font color="#FF544B">%s times</font> but sadly <br><br> with spacing now]]></string>
解析代码保持不变:
HtmlCompat.fromHtml(resources.getString(R.string.my_string, count), HtmlCompat.FROM_HTML_MODE_COMPACT)
2. 用<p>标签实现段落间距
如果需要更规整的段落级间距,可以用<p>标签包裹不同段落,默认情况下<p>标签会自带上下边距:
<string name="my_string"><![CDATA[<p>My string counts <font color="#FF544B">%s times</font></p><p>but sadly with spacing now</p>]]></string>
3. 自定义间距大小(可选)
如果需要精确控制间距,可以用<div>标签结合内联样式(注意Android的HTML解析对CSS支持有限,优先用简单属性):
<string name="my_string"><![CDATA[My string counts <font color="#FF544B">%s times</font> but sadly <div style="margin-top:16px;">no spacing no more</div>]]></string>
原理说明
HtmlCompat.fromHtml遵循HTML解析规则,原生的\n在HTML中只会被解析为普通空格,只有HTML的<br>(换行)、<p>(段落)这类标签才能生成对应的换行和间距效果。
内容的提问来源于stack exchange,提问作者petrrr33
相关产品推荐
相关产品推荐

