2017-08-26 5 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

には検索方法はありませんしかし、あなたはStringに変換した後、あなたはindexOf()を使用することができます。

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(blue、i、i + len、Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) .setSpan(新しいForegroundColorSpan(Color.BLUE)、i、i + 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

ありがとう、私は一度私のスパンを設定し、私は方法のように設定した後、指定された単語を確認する方法をしたい** Gil vegliach ** –

関連する問題