HTML 格式字符串插入 TextViews 和 EditText

问题描述 投票:0回答:2

我有一个数据库,它将存储 HTML 标记文本以保留 EditText 中的格式信息。我使用 HTML.toHtml(EditText.getText) 创建此字符串。我注意到这个方法用

<p> and </p>
包装了放入其中的任何跨区文本。问题是,当我使用 HTML.fromHtml(HTMLFormattedString) 方法,然后使用 TextView 或 EditText 的 setText 方法时,实际文本末尾有两行,这是有道理的,因为这就是如何段落标签适用于 HTML。

有没有办法让textView或EditText缩小以不显示多余的空行?最简单的方法是什么?我尝试过只删除最后一个

<p> and </p>
,但只有当用户没有使用 return 键输入 3 个或更多新行时才有效。

android html formatting textview android-edittext
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));
}

2
投票

这只是一个迂回的方法。我遇到过同样的问题。并且为您提供了两种选择,

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
中,您必须进行更改。

© www.soinside.com 2019 - 2024. All rights reserved.