2017-08-26 27 views
3

我想知道如何檢測SpannableStringBuilder中的某些指定單詞。 我的目的是改變這個詞的顏色。如何檢測SpannableStringBuilder android中的特定單詞?

說我有SpannableStringBuilder span和名單中包括我的話,如「名稱」,「家庭」,「位置」等

在這個階段,我想檢查我的span是包括這些詞,然後改變顏色。

例如,我想是這樣的:

if(span.contain("Name")) // Change Color of the word "Name" every where in this span 
if(span.contain("Family")) // Change Color of the word "Family" every where in this span 

等等...

有沒有檢查任何方法?任何代碼示例將不勝感激。

+0

span.toString()的indexOf( 「名稱」); span.setSpan(...) –

+0

我發佈了一個完整的答案,使其更清晰。 –

回答

2

沒有搜索方法但你可以使用你indexOf()其轉換爲String後:

Set<String> words = new HashSet<String>() {{ 
    add("Name"); add("Family"); add("Location"); 
}}; 
String s = span.toString(); 
for (String word : words) { 
    int len = word.length(); 
    // Here you might want to add a check for an empty word 
    for (int i = 0; (i = s.indexOf(word, i)) >= 0; i += len) { 
    span.setSpan(new ForegroundColorSpan(Color.BLUE), i, i + len, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
    } 
} 
+0

感謝它的作品,但不完美,例如當我的跨度是「名稱,名稱「顏色的最後一個名稱不是所有的指定字(在這種情況下名稱) –

+1

嘿我得到了問題,請更改'span.setSpan(藍色,我,我+ len,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);'到'跨度.setSpan(新的ForegroundColorSpan(Color.BLUE),我,我+ len,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);'然後我會接受答案;) –

+0

@shahingh:很酷,謝謝!改變。以前的版本已經是這樣了,但後來我認爲提取變量更有效率。很高興知道它不工作:) –

1

這是怎麼製作多種顏色和字:

SpannableStringBuilder builder = new SpannableStringBuilder(); 
String red = "this is red"; 
SpannableString redSpannable= new SpannableString(red); 
redSpannable.setSpan(new ForegroundColorSpan(Color.RED), 0, red.length(), 0); 
builder.append(redSpannable); 
String white = "this is white"; 
SpannableString whiteSpannable= new SpannableString(white); 
whiteSpannable.setSpan(new ForegroundColorSpan(Color.WHITE), 0, white.length(), 0); 
builder.append(whiteSpannable); 
String blue = "this is blue"; 
SpannableString blueSpannable = new SpannableString(blue); 
blueSpannable.setSpan(new ForegroundColorSpan(Color.BLUE), 0, blue.length(), 0); builder.append(blueSpannable); mTextView.setText(builder, BufferType.SPANNABLE); 

對於現象單詞指標做如下:

int first = str.indexOf("hi"); 
int next = str.indexOf("hi", first+1); 

read api

這樣做是爲了讓所有的指標和它們上色

+0

謝謝,我設置了我的跨度一次,我想要一種方式來檢查設置後的指定單詞,就像**吉爾vegliach ** –

相關問題