当用户撰写时,如何在EditText文本上应用跨度?
例如,用户在作曲时激活了"bold",因此此后输入的每个字符都应该是bold。
我想过在EditText中添加文本更改侦听器,并在用户编写时更新文本,但我想知道是否有更好的方法。
这个问题已经在评论中得到了回答,但为了让它更持久,我将添加一个更完整的答案
为了在用户创作的任何地方设置跨度(如粗体),只需在光标(或选择)位置的文本上设置一个跨度。
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);
SPAN_INCLUSIVE_INCLUSIVE
标志表示在跨度之前或之后添加的任何文本都将包含在跨度中,即使添加跨度时文本长度为0
。
另请参见
- 如何设置其他类型的跨度
- 可生成标志的含义
您可以使用文本观察程序,并在afterTextChanged()
方法中接收的可编辑中设置跨度,我目前正在编写一个富文本编辑器,这是我在样式中使用的方法,效果很好,但到目前为止,我还无法设置需要quoteSpan或bulletSpan等段落的跨度。
但是,如果你只想要简单的样式,比如斜体或粗体等,你可以使用这种方法。