2017-08-26 31 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 ** –

相关问题