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);
    }

將我們整個字符串,需要改變顏色的字符,顏色,傳過去就可以了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章