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);
到
我以前试过这种方法,但没有解决我的问题。