代码之家  ›  专栏  ›  技术社区  ›  skysign

有关于跨距和可跨距文本的例子吗

  •  28
  • skysign  · 技术社区  · 16 年前

    我一直在努力使用edittext和spannable-text对象,最近,我已经阅读了大约十次API文档,即使我不确定是否正确理解。所以我在找一个例子,演示如何使用edittext和spannable。

    2 回复  |  直到 9 年前
        1
  •  32
  •   Macke    13 年前

    由于您没有指定从API中无法掌握的内容,因此很难回答您的问题(简短回答:将问题重写为特定问题,而不是一般问题)。

    一个典型的可spannable示例是这样的,它将编辑文本中的选定文本转换为斜体:

    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中,您可以找到其他类型的跨度(尤其是 ImageSpan 这是新转化的机器人中常见的问题)。

        2
  •  10
  •   Sam L.    15 年前

    我也刚开始想办法解决这个问题,这似乎不必要。

    下面是一个向现有视图添加新的可显示文本的工作方法。我想在视图中添加彩色文本,这似乎是唯一的方法。

    虽然这看起来像一个丑陋的黑客,但是您可以创建一个虚拟的文本视图(不在任何地方显示)并在那里设置文本样式,然后将该样式化的文本附加到您想要的任何地方。这归功于iifuzz网站anddev.org。我的代码看起来是这样的:

        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);
    

    但是我不能让这个文本显示新的跨度效果,所以我放弃了。