HTML格式化字符串插入TextViews和EditText

时间:2012-07-24 04:25:46

标签: android html formatting textview android-edittext

所有

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

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

2 个答案:

答案 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”,你必须做出改变。