HTML преобразуется жирным шрифтом или курсивом строки в Android
У меня есть метод в моем пользовательском 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
1 ответ
Попробуйте изменить эти строки
SpannableString span = new SpannableString(getText().subSequence(startSelection, endSelection));
span.setSpan(new StyleSpan(Typeface.NORMAL), 0, span.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
в
SpannableString span = new SpannableString(getText().subSequence(startSelection, endSelection));
final StyleSpan[] spans = span.getSpans(0, span.length(), StyleSpan.class);
for (StyleSpan styleSpan : spans) span.removeSpan(styleSpan);