Java Android:Html.toHtml()在每个单词上添加Html标记
toHtml()分别对每个单词应用标记 原文: 你好,世界 Html.ToHtml()结果: 使用字体设置为Java Android:Html.toHtml()在每个单词上添加Html标记,java,android,html,Java,Android,Html,toHtml()分别对每个单词应用标记 原文: 你好,世界 Html.ToHtml()结果: 使用字体设置为字体。粗体或字体。斜体 我尝试了Spannable.SPAN_EXCLUSIVE_EXCLUSIVE,但仍然没有用 这就是我在键入时在EditText中应用span的方式 protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) { super.onTe
字体。粗体
或字体。斜体
我尝试了Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
,但仍然没有用
这就是我在键入时在EditText中应用span的方式
protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
super.onTextChanged(text, start, lengthBefore, lengthAfter);
if (lengthAfter > lengthBefore)
applyCurrentStyle(start, start + lengthAfter);
}
applyCurrentStyle():
需要明确的是,您的
StyleSpan
跨越了两个词?或者您是否有两个StyleSpan
对象,每个单词一个?@commonware否,如果已经存在新的StyleSpan,我将避免使用。用代码更新了问题。
spannable.setSpan(new StyleSpan(typeFace), start, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
super.onTextChanged(text, start, lengthBefore, lengthAfter);
if (lengthAfter > lengthBefore)
applyCurrentStyle(start, start + lengthAfter);
}
private void applyCurrentStyle(int startSpan, int endSpan) {
for (Style style : mCurrentStyles) {
boolean alreadyHas = false;
switch (style) {
case BOLD:
for (StyleSpan span : getStyleSpans(Typeface.BOLD, startSpan, endSpan)) {
if (getText().getSpanEnd(span) == endSpan) {
alreadyHas = true;
break;
}
}
if (!alreadyHas)
setStyleSpan(Typeface.BOLD, startSpan, endSpan);
break;
case ITALIC:
for (StyleSpan span : getStyleSpans(Typeface.ITALIC, startSpan, endSpan)) {
if (getText().getSpanEnd(span) == endSpan) {
alreadyHas = true;
break;
}
}
if (!alreadyHas)
setStyleSpan(Typeface.ITALIC, startSpan, endSpan);
break;
}
}
}