3

全て、

EditText からの書式設定情報を保持するために、HTML タグ付きテキストを格納するデータベースがあります。HTML.toHtml(EditText.getText) を使用してこの文字列を作成します。このメソッドは、スパンされたテキストが含まれているものを でラップしていることに気付きました<p> and </p>。それに関する問題は、メソッド HTML.fromHtml(HTMLFormattedString) を使用してから、TextView または EditText のいずれかの setText メソッドを使用するときに、実際のテキストの最後に 2 つの余分な行があることです。段落タグは HTML で機能します。

私の質問は、余分な空白行を表示しないように textView または EditText を縮小する方法はありますか? これを行う最も簡単な方法は何ですか? 最後の<p> and </p>.

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

まあ、これはラウンドアバウトのアプローチです。同じ問題がありました。そして、2 つのオプションが提供されます。

1)あなたが言ったように、段落タグはあなたが疑ったように機能します。各 <\p> タグの末尾に 2 つの "\n" 値を追加します。したがって、html を文字列に変換し、通常は 2 つの「\n」である最後の 2 文字を削除できます。

また

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ように、変更を行う必要がある 2 つの "\n" が追加されます。

于 2012-07-24T04:34:40.147 に答える