3

全部,

我有一个数据库,它将存储 HTML 标记文本以保留来自 EditText 的格式信息。我使用 HTML.toHtml(EditText.getText) 创建了这个字符串。我注意到这个方法用<p> and </p>. 问题是当我必须使用方法 HTML.fromHtml(HTMLFormattedString) 然后使用 TextView 或 EditText 的 setText 方法时,我的实际文本末尾有两行额外的行,这是有道理的,因为这就是段落标签适用于 HTML。

我的问题是无论如何要使 textView 或 EditText 缩小以不显示额外的空白行?最简单的方法是什么?我已经尝试删除最后一个<p> and </p>,但这仅在用户没有使用返回键输入 3 个或更多新行的情况下才有效。

4

2 回答 2

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));
}
于 2012-07-28T02:47:30.917 回答
2

好吧,这只是一个关于方法的回合。我遇到过同样的问题。你有两个选择,

1)正如您所说,段落标签的工作方式与您怀疑的方式相同。它的作用是将两个“\n”值附加到每个 <\p> 标记的末尾。因此,您可以将 html 转换为字符串并删除通常是两个“\n”的最后两个字符

或者

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");


    }
} 

正如您在此处看到的,它附加了两个“\n”,len!=0您必须在其中进行更改。

于 2012-07-24T04:34:40.147 回答