我有一个数据库,它将存储 HTML 标记文本以保留 EditText 中的格式信息。我使用 HTML.toHtml(EditText.getText) 创建此字符串。我注意到这个方法用
<p> and </p>
包装了放入其中的任何跨区文本。问题是,当我使用 HTML.fromHtml(HTMLFormattedString) 方法,然后使用 TextView 或 EditText 的 setText 方法时,实际文本末尾有两行,这是有道理的,因为这就是如何段落标签适用于 HTML。
有没有办法让textView或EditText缩小以不显示多余的空行?最简单的方法是什么?我尝试过只删除最后一个
<p> and </p>
,但只有当用户没有使用 return 键输入 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)正如您所说,段落标签的工作方式与您所怀疑的一样。它的作用是附加两个“ “值到每个<\p>标签的末尾。因此您可以将html转换为字符串并删除最后两个字符,通常是两个“ ”
或
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
中,您必须进行更改。