2010-01-29 44 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); 

,但我不能讓這個文本實際上顯示出新的跨度效應,所以我放棄了。

相關問題