java - 当该部分文本发生更改时,从“可编辑”中删除跨度

标签 java android

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

即如果有人输入“你好,恭喜”,然后开始删除字母,他们会看到“你好,恭喜”而不是“你好,恭喜”。 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/

相关文章:

android - 我可以创建一个新文件夹并将我的 SQLite 导入其中吗?

android - onDestroy() 究竟破坏了什么?

机器人 : scaling bitmap to fit imageview

java将字符串存储在char数组中

java - 无法从 java 应用程序连接到远程 FileZilla ftp 服务器

java - Antlr4:防止规则和 token 冲突

java - 在Android中使用不同组件设置表格布局中列的宽度相等

java - 线程中的异常 "AWT-EventQueue-0"java.lang.ArrayIndexOutOfBoundsException : 0 >= 0

java - Docker:由于未找到 JAXB-API,Jenkins-jdk11 无法连接到 Nexus

android - 流式传输音频文件并缓存它