有关Spanned和Spannable文本的示例吗?

29

我在使用EditText和Spannable文本对象时遇到了困难。这些天来,我已经阅读了大约十次左右的API文档,甚至不确定我是否理解正确。因此,我正在寻找一个示例,以展示如何利用EditText和Spannable。


5
这是一个非常完美的答案,适用于所有希望使用 Spannable 和 TextView 实现文本处理的人。 - Pinser
这里有一些例子,请参见这里这里 - Suragch
2个回答

32

你没有具体说明你从API中无法理解什么,因此很难回答你的问题(简短的答案是:重写你的问题,提出具体问题而不是泛泛而谈的问题)。

一个典型的Spannable示例类似于以下内容,它可以将EditText中选定的文本变为斜体:

Spannable str = mBodyText.getText(); 
if(mBodyText.getSelectionEnd() > mBodyText.getSelectionStart()) 
  str.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC),  
                      mBodyText.getSelectionStart(), mBodyText.getSelectionEnd(),  
                      Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
else
  str.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC),
              mBodyText.getSelectionEnd(),
              mBodyText.getSelectionStart(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

这段内容是从其他地方复制粘贴而来的,因此您可能会遇到直接复制后出现的问题,但至少它展示了一个运行良好的 Spannable 示例(在本例中是一个 StyleSpan)。在 API 中可以找到其他类型的 Spans(特别是常见问题之一的 ImageSpan),这对于新转变的安卓开发者来说是很重要的。


这个回复对我非常有帮助,谢谢。但我仍然有一堆问题需要解决。 正如你上面描述的,这里是一个链接,展示了我所面临的问题。 http://stackoverflow.com/questions/2093111/when-some-text-is-copied-and-pasted-pasted-text-inherit-previous-text-style-it 如果你需要更多关于问题的细节,这里还有另一个链接。 http://code.google.com/p/blogaway/issues/detail?id=32 可能,上面的链接更详尽,可以帮助弄清楚问题所在。 - skysign
1
虽然SpannableString的作用非常明显,但是SpannedString的示例会非常有帮助,因为我完全不清楚它的用途以及如何首先创建它。 - AndreKR

10

我也刚开始试图弄清楚这个问题,似乎过于棘手。

这里是一种可行的方法,用于在现有视图中添加新的可跨度文本。 我想将彩色文字添加到一个视图中,而这似乎是唯一的方法。

虽然感觉像是丑陋的hack,但你可以创建一个虚拟TextView(不会显示在任何地方),并在那里样式化文本,然后将该样式化文本追加到任何你想要的位置。 这个想法来自 anddev.org 的 iifuzz。我的代码如下:

    spanbuffer = new TextView(context);
    spanbuffer.setText(newText, TextView.BufferType.SPANNABLE);
    Spannable s = (Spannable) spanbuffer.getText();
    s.setSpan(new ForegroundColorSpan(Color.RED), 0, newText.length() - 1, 0);
    this.append(s);

我认为你可以使用SpannableFactory创建新的可跨度文本, 如下所示:

    Spannable s = Spannable.Factory.getInstance().newSpannable(newText);

但我无法使得这段文字显示新的span效果,所以我放弃了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接