是否有任何关于Spanned和Spannable文本的示例

时间:2010-01-29 04:17:06

标签: android android-widget

我正在努力使用EditText和Spannable文本对象,这些天,我已经阅读了大约十次API文档,即使我不确定我是否理解正确。所以我正在寻找一个向我展示如何利用EditText和Spannable的例子。

2 个答案:

答案 0 :(得分:32)

由于您未指定API无法掌握的内容,因此很难回答您的问题(简答:将问题重写为特定问题而非一般问题)。

典型的Spannable-example就是这样,可以将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,这是新转换的droiders中常见的问题。)

答案 1 :(得分:10)

我刚刚开始尝试解决这个问题,而且似乎不必要的狡猾。

这是将新的spannable文本添加到现有视图的工作方法。我想在视图中添加彩色文本,这似乎是唯一的方法。

虽然感觉像是一个丑陋的黑客,但您可以创建一个虚拟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文本,如下所示:

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

但我无法让这段文字显示新的跨度效果,所以我放弃了。