2010-01-29 50 views
26

我正在努力使用EditText和Spannable文本对象,现在,我已经读了10次API文档,即使我不确定我是否理解正确。所以我正在寻找一个例子,告诉我如何利用EditText和Spannable。是否有任何有关Spanned和Spannable文本的示例

+5

http://www.chrisumbel.com/article/android_textview_rich_text_spannablestring对于每个想用Spannable和Textveiw做任何事情的人来说,这都是一个完美的答案。 – JehandadK 2012-02-09 05:55:03

+0

查看[这里](http://stackoverflow.com/a/41953808/3681880)和[这里](http://androidcocktail.blogspot.com/2014/03/android-spannablestring-example.html)的一些例子。 – Suragch 2017-01-31 09:51:07

回答

30

由于您没有指定从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,这是新转换的droiders中的常见问题)。

+0

此回复对我很有帮助,谢谢。但我仍然有一堆问题,我必须解决。 正如你上面所描述的,这里是一个链接,显示我面临的问题。 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 2010-02-02 08:50:12

+0

虽然'SpannableString'的目的很明显,'SpannedString'的例子会非常有用,因为我完全不清楚该如何使用它以及如何创建它。 – AndreKR 2015-03-08 10:40:59

9

我刚开始尝试弄清楚它,看起来不必要的棘手。

下面是一个工作方法,将新的可跨越文本添加到现有视图。我想为视图添加彩色文本,这似乎是唯一的方法。

虽然感觉像一个丑陋的黑客,你可以创建一个虚拟的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); 

,但我不能让这个文本实际上显示出新的跨度效应,所以我放弃了。

相关问题