android span如何处理EditText中的输入字符
我想实现一种效果,控制edittext中的输入字符是否使用span 例如,在EditText中可以使用android span如何处理EditText中的输入字符,android,html,spannablestring,richedit,spannable,Android,Html,Spannablestring,Richedit,Spannable,我想实现一种效果,控制edittext中的输入字符是否使用span 例如,在EditText中可以使用 getEditableText().setSpan(new StyleSpan(Typeface.NORMAL), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 将所选字符设置为粗体。是否有解决方案,当用户启用粗体设置时,此后输入的每个字符都将粗体,并且一旦用户禁用粗体设置,之后输入的字符将不会粗体 我尝试在SpannableStringBuilder.s
getEditableText().setSpan(new StyleSpan(Typeface.NORMAL), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
将所选字符设置为粗体。是否有解决方案,当用户启用粗体设置时,此后输入的每个字符都将粗体,并且一旦用户禁用粗体设置,之后输入的字符将不会粗体
我尝试在SpannableStringBuilder.setSpan()中使用SPAN.SPAN_EXCLUSIVE_INCLUSIVE作为标志,但我只能控制SPAN的效果何时开始,无法控制结束
还尝试使用TextWatcher来监听每个字符的输入,并将Span设置为每个字符
@Override
protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter)
{
setTextSpan(start, lengthBefore, lengthAfter);
}
private void setTextSpan(int start, int lengthBefore, int lengthAfter)
{
if (isBold) {
getEditableText().setSpan(new StyleSpan(Typeface.BOLD), start, start + lengthAfter, Spanned
.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
但是当使用Html.toHtml()时,每个字符都将被
包装
比如111111
我在SpannableStringBuilder.java中阅读了一些源代码,但没有找到任何方法来更改span的作用域
希望有人能给我一些建议。提前感谢。找到了一些有用的建议,您可以查看“”
但是,还有另一个问题:标志“SPAN_INCLUSIVE_INCLUSIVE”设置字体粗体效果很好。但是,当我切换到将字体设置为不加粗(只是返回到正常值)时,插入的文本仍然是加粗的。我不知道如何解决这个问题。首先,为EditText设置
TextWatcher
。然后有两种解决方案。1.文本更改时,如果输入字符,请使用
removeSpan()
,然后使用setSpan()
重置量程。2.使用反射
SpannableStringBuilder
具有成员调用mSpanEnds
,此数组在SpannableStringBuilder
中记录所有span的位置信息,使用reflect更改其值。我有一个解决方案2,这个示例可能有一些错误,但它在应用范围内工作得很好。你使用的TextWatcher怎么样,有什么问题吗?@Hoo Chhunleng很抱歉这么晚才回复。问题是,当我使用TextWatcher并输入一些字符时,显示是正确的,但经过Html.toHtml()转换后,结果不是我想要的。例如,输入:abdce,转换后我会得到“
abcde
”,但我想要的结果是“abcde
”@hoo Chhunleng,这样就可以将所选文本设置为粗体。我想要的效果是,当启用粗体时,后面输入的所有字符都是粗体,禁用粗体,输入正常。抱歉打扰您,您解决问题了吗?还是找到其他方法来实现?如果是这样的话,非常感谢你的回复。嗨,我已经阅读了你提到的答案,这个解决方案可以解决一些问题,但是我遇到的情况更复杂。我终于想到了两个解决方案。我将在我的回答中描述它们