我正在尝试将样式应用于输入字段,以便当用户键入“恭喜”一词时它会变为粗体。我遇到的问题是,当用户开始删除文本时,剩下的字母仍然是粗体,直到它们全部被删除。
即如果有人输入“你好,恭喜”,然后开始删除字母,他们会看到“你好,恭喜”而不是“你好,恭喜”。 p>
这是我正在使用的代码
private class StyleListener implements TextWatcher {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
s = new SpannableStringBuilder(congratStyle(s));
}
}
public static Spannable congratStyle(Spannable message) {
Pattern pattern = Pattern.compile("congratulations");
Matcher matcher = pattern.matcher(message);
while (matcher.find()) {
message.setSpan(new StyleSpan(Typeface.BOLD), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return message;
}
我尝试在 while (matcher.find()) {
之前执行 message = new SpannableStringBuilder(message.toString());
来清除任何跨度的文本,然后重新应用粗体,但粗体不再被应用,即它的结果是“嗨,恭喜”。
理想情况下,我希望在更改范围内的文本时删除范围,但清除所有范围然后在适用的情况下重新应用粗体范围也是一个可接受的选项。
有什么想法吗?谢谢。
最佳答案
我认为你应该改变
message.setSpan(new StyleSpan(Typeface.BOLD), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
至
message.setSpan(new StyleSpan(Typeface.BOLD), matcher.start(), matcher.end(), Spannable.SPAN_COMPOSING);
关于java - 当该部分文本发生更改时,从“可编辑”中删除跨度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60697409/