如何在用户撰写时对EditText文本应用跨度?
例如,用户在编写时已激活“粗体”,因此从那时起每个字符输入应为粗体。
我考虑过将文本更改侦听器添加到EditText并在用户编写时更新文本,但我想知道是否有更好的方法来执行此操作。
答案 0 :(得分:0)
问题已在评论中得到解答,但为了使其更具永久性,我将添加更全面的答案。
为了在用户编写的任何地方设置范围(如Bold),您只需在光标(或选择)位置的文本上设置范围。
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
。
另见
答案 1 :(得分:0)
您可以使用文本观察器,并在afterTextChanged()
方法中将其设置为可编辑的范围,我目前正在编写富文本编辑器,这是我在样式中使用的方法,而且效果很好,但是到目前为止,我还无法设置需要诸如quoteSpan或bulletSpan之类的段落的跨度。
但是,如果您只想使用斜体或粗体等简单样式,则可以使用这种方法。