【问题标题】:Android EditText: how to apply spans when composing?Android EditText:撰写时如何应用跨度?
【发布时间】:2014-12-02 05:54:39
【问题描述】:

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

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

我考虑将文本更改侦听器添加到 EditText 并在用户撰写时更新文本,但我想知道是否有更好的方法。

【问题讨论】:

  • 你不需要任何东西:例如将粗体跨度设置为长度为 3,然后将插入符号放入其中并开始输入...
  • @pskink - 但是如果根本没有文字怎么办?
  • 提示:尝试不同的 setSpan 标志
  • @pskink 我尝试了不同的标志,但不幸的是没有运气。
  • 你尝试了哪些标志?

标签: android android-edittext spannablestring spannable


【解决方案1】:

问题已在 cmets 中得到解答,但为了使其更持久,我将添加更完整的答案。

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

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 标志意味着在 span 之前或之后添加的任何文本都将包含在 span 中,即使在添加 span 时文本长度为0

另请参阅

【讨论】:

  • 感谢您的建议。标志 'SPAN_INCLUSIVE_INCLUSIVE' 设置字体 BOLD 效果很好。但是,当我切换到设置字体 NOT BOLD(只是恢复正常)时,插入的文本仍然是 BOLD。那么如何解决这个问题。谢谢!
  • 看看clearSpans()removeSpan()。 @画廊
【解决方案2】:

您可以使用文本观察器,并在afterTextChanged() 方法中收到的可编辑内容中设置跨度,我目前正在编写一个富文本编辑器,这是我用于样式的方法,它效果很好,但是,到目前为止,我还无法设置需要quoteSpan 或bulletSpan 等段落的跨度。

但如果您只想要简单的样式,如斜体或粗体等,您可以使用这种方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    相关资源
    最近更新 更多