2015-06-29 58 views
1

我想給字符串中的前兩個字賦予一些樣式效果(如粗體,刪除線)。 我這樣做的方式受此啓發thread使用Spannable字符串設計兩個第一個字

String[] tokens = text.split(" "); 
String twoFirstWords = tokens[0] + " " + tokens[1]; //two first words 

String content = text.replaceFirst(twoFirstWords, " "); //the rest 

SpannableStringBuilder builder = new SpannableStringBuilder(); 
SpannableString span1 = new SpannableString(twoFirstWords); 
SpannableString span2 = new SpannableString(content); 
span1.setSpan(new StyleSpan(Typeface.BOLD), 0, twoFirstWords.length(), Spanned.SPAN_EXCLUSIVE_INCLUSIVE); 
span1.setSpan(new StrikethroughSpan(),0, twoFirstWords.length(), Spanned.SPAN_EXCLUSIVE_INCLUSIVE); 
span1.setSpan(new CustomTypefaceSpan("", fontFirst), 0, twoFirstWords.length(), Spanned.SPAN_EXCLUSIVE_INCLUSIVE); 
span2.setSpan(new CustomTypefaceSpan("", fontContent), 0, content.length(), Spanned.SPAN_EXCLUSIVE_INCLUSIVE); 

builder.append(span1); 
builder.append(span2); 
textView.setText(builder, TextView.BufferType.SPANNABLE); 

基於上面的代碼,我想只有兩個第一句話。然而,這些影響也被應用於內容給BOLD和刪除線的效果。

當我爲字符串中的最後兩個單詞應用樣式時,此代碼正常工作,但在使用第一個單詞時保持失敗。我懷疑這是因爲.SetSpan(或者情況並非如此)的錯誤開始和結尾......我仍然無法找到開始和結束的正確索引..任何人都可以幫助我解決這個問題嗎?謝謝。

+1

嘗試SPAN_EXCLUSIVE_EXCLUSIVE – pskink

+0

omg。它的工作..謝謝你。一個upvote爲你:) 反正..什麼是EXCLUSIVE_EXCLUSIVE和EXCLUSIVE_INCLUSIVE的意思是? – Lynx

+0

請參閱http://stackoverflow.com/questions/16531555/what-is-the-difference-between-span-point-mark-and-span-mark-point – pskink

回答

0

好的,我們有一個結論。感謝pskink!

我需要做什麼,所以效果不適用於使用SPAN_EXCLUSIVE_EXCLUSIVE的內容。如下所示:

span1.setSpan(new StyleSpan(Typeface.BOLD), 0, twoFirstWords.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
0

是的,你可以這樣做。我這樣做的方式(因爲它是相對簡單的東西)只是用HTML。所以,你可以做這樣的事情......

TextView textView = (TextView) findViewById(R.id.textView); 

textView.setText(Html.fromHtml("<b><strike>" + twoFirstWords 
    + "</b></strike>" + restOfTheSentence)); 

CommonsWare有一個偉大的博客文章,列出了這個支持,你可以找到here的標籤。

+0

謝謝您的評論。現在,我的大部分代碼充滿了Spannable String ...所以我真的想知道如何使用spannable字符串修復它。如果你知道如何,它會有很大的幫助。謝謝你在這裏評論! :) – Lynx

+0

@Lynx當然。然後,您需要創建一個字符串,然後爲各個部分設置跨度。我不認爲你可以按照你在問題中所做的方式將兩個跨度結合起來。 –

相關問題