android中html转换的粗体或斜体跨距字符串

android中html转换的粗体或斜体跨距字符串,android,android-edittext,spannablestring,spannablestringbuilder,Android,Android Edittext,Spannablestring,Spannablestringbuilder,我的自定义编辑文本中有一种方法,可以将文本设置为粗体或斜体 这是我的方法: public boolean changeTextStyle(TextStyle style) { if (isTextSelected()) { int startSelection = getSelectionStart(); int endSelection = getSelectionEnd(); SpannableString span = new Spa

我的自定义编辑文本中有一种方法,可以将文本设置为粗体或斜体

这是我的方法:

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;
    }
}
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();
}
当我将bold文本样式切换为斜体样式或反转时,一切都很好,在编辑文本中,它从粗体变为斜体,但当我想将该文本转换为html时,问题出现了,并返回一个html,其中包含两个html标记粗体斜体文本,但我只想在粗体或斜体之间切换

下面是我转换为html的方法:

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;
    }
}
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();
}
公共字符串getFinalText(){
返回StringEscapeUtils.unescapethml4(Html.toHtml(getText())
.replace(“

”,“”) .replace(“

”,“”) .替换(“,”) .替换(“,”) .替换(“”,“”) .替换(“

”,“”) .trim(); }
简而言之

我想要这个:

This is <b>simple</b> text
这是简单的文本

这是简单的文本
但结果是:

This is <b><i>simple</i></b> text
这是简单的文本

尝试更改这些行

SpannableString span = new SpannableString(getText().subSequence(startSelection, endSelection));
        span.setSpan(new StyleSpan(Typeface.NORMAL), 0, span.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);


我以前试过这种方法,但没有解决我的问题。