Android EditText:撰写时如何应用跨度?

use*_*007 5 android android-edittext spannablestring spannable

当用户撰写时,如何在 EditText 文本上应用跨度?

例如,用户在撰写时激活了“粗体”,因此此后输入的每个字符都应该是粗体

我考虑过向 EditText 添加文本更改侦听器并在用户撰写时更新文本,但我想知道是否有更好的方法来执行此操作。

Sur*_*gch 3

这个问题已经在评论中得到了回答,但为了使其更持久,我将添加更完整的答案。

为了在用户撰写的任何地方设置跨度(如粗体),您只需在光标(或选择)位置的文本上设置跨度。

StyleSpan boldSpan = new StyleSpan(Typeface.BOLD);
int start = editText.getSelectionStart();
int end = editText.getSelectionEnd();
int flag = Spannable.SPAN_INCLUSIVE_INCLUSIVE;
editText.getText().setSpan(boldSpan, start, end, flag);
Run Code Online (Sandbox Code Playgroud)

SPAN_INCLUSIVE_INCLUSIVE标志意味着在跨度之前或之后添加的任何文本都将包含在跨度中,即使文本长度是0添加跨度时的长度。

也可以看看