Java 更改文本的该部分时,从“可编辑”中删除“范围”

Java 更改文本的该部分时,从“可编辑”中删除“范围”,java,android,Java,Android,我正在尝试将样式应用于输入字段,以便当用户键入“恭喜”时,它将变为粗体。我遇到的问题是,当用户开始删除文本时,留下的字母仍然是粗体的,直到它们全部被删除 i、 e.如果有人键入“你好,恭喜你”,然后开始删除字母,他们会看到“你好,恭喜你”,而不是“你好,恭喜你” 这是我正在使用的代码 私有类StyleListener实现TextWatcher{ @凌驾 更改前文本之前的公共void(字符序列s、int start、int count、int after){ } @凌驾 public void o

我正在尝试将样式应用于输入字段,以便当用户键入“恭喜”时,它将变为粗体。我遇到的问题是,当用户开始删除文本时,留下的字母仍然是粗体的,直到它们全部被删除

i、 e.如果有人键入“你好,恭喜你”,然后开始删除字母,他们会看到“你好,恭喜你”,而不是“你好,恭喜你”

这是我正在使用的代码

私有类StyleListener实现TextWatcher{
@凌驾
更改前文本之前的公共void(字符序列s、int start、int count、int after){
}
@凌驾
public void onTextChanged(字符序列、int start、int count、int after){
}
@凌驾
公共无效后文本已更改(可编辑){
s=新的SpannableStringBuilder(祝贺样式);
}
}
公共静态Spannable CongreatStyle(Spannable消息){
Pattern=Pattern.compile(“恭喜”);
Matcher Matcher=pattern.Matcher(消息);
while(matcher.find()){
message.setSpan(新样式SPAN(Typeface.BOLD)、matcher.start()、matcher.end()、Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
返回消息;
}
我试过做
message=newspannablestringbuilder(message.toString())
before
while(matcher.find()){
以清除任何跨距的文本,然后重新应用粗体,但粗体将不再应用,即它会导致“您好,恭喜您”

理想情况下,我希望在范围内的文本更改时删除范围,但清除所有范围,然后在适用的情况下重新应用粗体范围也是一个可接受的选项


有什么想法吗?谢谢。

我想你应该改变一下

message.setSpan(new StyleSpan(Typeface.BOLD), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);


这几乎是可行的,但偶尔在删除Spanable之后出现的空格时,它会选择删除粗体,尽管不受影响,例如从“你好,恭喜我的朋友”改为“你好,恭喜我的朋友”,在删除我和朋友之间的空格后,粗体消失,并在删除我的字符或将空格添加回inIt后重新添加。结果表明,将键入指示器移动到空格上就足够了,甚至不删除空格,从而导致粗体消失……非常奇怪
message.setSpan(new StyleSpan(Typeface.BOLD), matcher.start(), matcher.end(), Spannable.SPAN_COMPOSING);