所有
我有一个数据库,它将存储HTML标记文本以保留EditText中的格式信息。我使用HTML.toHtml(EditText.getText)创建此字符串。我注意到这个方法用<p> and </p>
包装任何跨越文本。问题是当我使用方法HTML.fromHtml(HTMLFormattedString)然后使用TextView或EditText的setText方法时,在我的实际文本的末尾有两个额外的行,这是有道理的,因为这是如何段落标记适用于HTML。
我的问题是,无论如何要使textView或EditText缩小以不显示额外的空白行?最简单的方法是什么?我已尝试删除最后一个<p> and </p>
,但仅在用户未使用返回键输入3个或更多新行时才有效。
答案 0 :(得分:3)
我最终在创建并删除它的跨区文本的末尾搜索空格。由于<p> </p>
,这会占用额外的空间,并且比覆盖上述类以获得相同结果的时间更短。
public SpannableStringBuilder trimTrailingWhitespace(
SpannableStringBuilder spannableString) {
if (spannableString == null)
return new SpannableStringBuilder("");
int i = spannableString.length();
// loop back to the first non-whitespace character
while (--i >= 0 && Character.isWhitespace(spannableString.charAt(i))) {
}
return new SpannableStringBuilder(spannableString.subSequence(0, i + 1));
}
答案 1 :(得分:2)
嗯,这只是一个圆的方法。我遇到过同样的问题。并且您有两个选项,
1)正如你所说,段落标签的工作方式与你所怀疑的一样。它做了什么,它在每个&lt; \ p&gt;的末尾添加了两个“\ n”值。标签。因此,您可以将html转换为字符串并删除最后两个通常为两个“\ n”s
的字符或
2)你已经进入了Html类本身。也就是说,您必须覆盖HTML类并查找handleP(SpannableStringBuilder text)
并稍微更改其核心逻辑。
private static void handleP(SpannableStringBuilder text) {
int len = text.length();
if (len >= 1 && text.charAt(len - 1) == '\n') {
if (len >= 2 && text.charAt(len - 2) == '\n') {
return;
}
text.append("\n");
return;
}
if (len != 0) {
text.append("\n\n");
}
}
正如你在这里看到的,它在len!=0
中附加了两个“\ n”,你必须做出改变。