0

カスタム EditText にテキストを太字または斜体にするメソッドがあります

ここに私の方法があります:

public boolean changeTextStyle(TextStyle style) {
    if (isTextSelected()) {
        int startSelection = getSelectionStart();
        int endSelection = getSelectionEnd();
        SpannableString span = new SpannableString(getText().subSequence(startSelection, endSelection));
        span.setSpan(new StyleSpan(Typeface.NORMAL), 0, span.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        span.setSpan(new CustomTypefaceSpan(getTypeface()), 0, span.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        switch (style) {
            case BOLD_STYLE: {
                span.setSpan(new StyleSpan(Typeface.BOLD), 0, span.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            }
            break;
            case ITALIC_STYLE: {
                span.setSpan(new StyleSpan(Typeface.ITALIC), 0, span.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            }
            break;
        }
        getText().replace(startSelection, endSelection, span);
        setSelection(endSelection);
        return true;
    } else {
        return false;
    }
}

太字のテキストスタイルをイタリックスタイルまたは反転に切り替えると、すべて問題なく、EditText で太字からイタリックに変わりますが、そのテキストを html に変換したい場合に問題が発生し、両方の html タグを含む html を返します太字のイタリックテキストしかし、太字と斜体を切り替えるだけです。

これが私のhtmlメソッドへの変換です:

public String getFinalText() {
    return StringEscapeUtils.unescapeHtml4(Html.toHtml(getText())
            .replace("<p dir=\"ltr\">", "")
            .replace("<p dir=\"rtl\">", "")
            .replace("<u>", "")
            .replace("</u>", "")
            .replace("<p>", "")
            .replace("</p>", ""))
            .trim();
}

短い方法で

これ欲しい:

This is <b>simple</b> text

また

This is <i>simple</i> text

しかし、出力は次のとおりです。

This is <b><i>simple</i></b> text
4

1 に答える 1