android textview字串指定分段設定字型顏色
對於同一字串,如何在不同欄位中設定不同顏色,如以下一段文字:
我偶然發現了紅色的欄位
如何將"紅色的欄位"設定為紅色,或許我們在做專案會有這個需求,比如
做一個如上的需求,那麼有些人就會自定義TextView,其實不用那麼麻煩,完全可以一步到位的.
寫一個方法,setTVColor,用來將所需文字進行顏色修改
/**
* 對指定字元設定顏色
* @param str
* 字串
* @param ch1
* 切換顏色開始的字元
* @param ch2
* 切換顏色停止的字元
* @param color
* 設定的顏色
* @param tv
* TextView控制元件
*/
private void setTVColor(String str , char ch1 , char ch2 , int color , TextView tv){
int a = str.indexOf(ch1); //從字元ch1的下標開始
int b = str.indexOf(ch2)+1; //到字元ch2的下標+1結束,因為SpannableStringBuilder的setSpan方法中區間為[ a,b )左閉右開
SpannableStringBuilder builder = new SpannableStringBuilder(str);
builder.setSpan(new ForegroundColorSpan(color), a, b, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(builder);
}
這裡解釋以下SpannableStringBuilder
SpannableStringBuilder基本上與String差不多,也是用來儲存字串,但它們倆的特殊就在於有一個SetSpan()函式,能給這些儲存的String新增各種格式或者稱樣式(Span),將原來的String以不同的樣式顯示出來,比如在原來String上加下劃線、加背景色、改變字型顏色、用圖片把指定的文字給替換掉,等等。
然後在onCreate中呼叫以下就可以了
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initTV();
}
private void initTV() {
tv = (TextView) findViewById(R.id.tv);
String str = "訂單管理\n(3)";
setTVColor(str, '(', ')', Color.RED, tv);
}