2013-11-21 52 views
1

我試圖爲SpannableString.setSpan不工作?

  str.append(" ").append(isBlue ? "b" : "p"); 
      SpannableString spannable = new SpannableString(str); 
      spannable.setSpan(new ForegroundColorSpan(isBlue ? R.color.blue: R.color.pink), 
        spannable.length() - 1, 
        spannable.length(), 
        Spanned.SPAN_INCLUSIVE_EXCLUSIVE); 
      miscTextView.setText(spannable); 

str設置不同的顏色是StringBuilder一個實例。 如果isBlue爲真,我期待miscTextView的最後一個字符爲藍色,否則爲粉紅色,而文本的其餘部分保持黑色。
但事實證明,無論哪種情況下,最後一個字符是灰色的,這真讓我困惑。 我做錯了什麼?

編輯:我檢查顏色資源xml already.Intellij顯示xml代碼行左側的顏色。

回答

3

您正在使用R.color.blue,它返回id。而應該得到的顏色如下:

getResources().getColor(R.color.blue) 

所以這將是:

spannable.setSpan(new ForegroundColorSpan(isBlue ? getResources().getColor(R.color.blue): getResources().getColor(R.color.pink)), 
        spannable.length() - 1, 
        spannable.length(), 
        Spanned.SPAN_INCLUSIVE_EXCLUSIVE); 

的原因,它是灰色的是因爲R.color.blue(在id值)的值可能對應一個整數灰色。

+0

問題解決。謝謝 – Will

+0

@在那種情況下請將它標記爲已回答!標記爲 –

+0

。我也試過了,但是SO沒有讓我離開,因爲這個問題發佈後太早了。 – Will