【发布时间】:2018-12-02 17:36:41
【问题描述】:
我在EditText 中设置了以下文本和样式:
SpannableStringBuilder sb = new SpannableStringBuilder();
sb.append("Hello");
sb.setSpan(new StyleSpan(Typeface.BOLD), 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
sb.append("World Test");
et.setText(sb);
结果是这样的:“HelloWorld Test”。这可以。现在,当我将光标放在“d”字符之后(即在分隔World 和Test 的空格之前)并输入一个字符时,Hello 会自动失去其粗体样式。
这是为什么呢?这让我很困惑。仅当将光标直接放在World 中的“d”之后并输入字符时才会发生这种情况。对于所有其他光标位置,它按预期工作。
为什么会这样以及如何解决?我希望 Hello 保持粗体。
【问题讨论】:
-
当您手动编辑editText时,文本被替换,这就是原因。你需要在textview上实现一个text watcher,并手动将粗体样式重新设置为你需要的部分
-
但是当我将光标放在“d”字符之后时,为什么它会丢失格式only?对于所有其他光标位置,格式保持不变。只有这个光标位置会导致格式丢失。
-
尝试添加一个 textWatcher 并查看调用了哪些回调
-
好的,通过检查回调参数,我可以看到当光标位于有问题的位置时,会替换整个范围的字符,而在其他位置仅替换单个字符。那么这种行为是有道理的。但是看到我必须手动重新应用样式真的很令人沮丧。确实应该有一种方法可以让
EditText自动执行此操作。 -
我同意你的观点,我也希望这是“默认”行为,很高兴你找到了解决方案,你能发布吗?
标签: android android-edittext textview spannablestring spanned