1. 程式人生 > >給TextView加上多彩效果:改變部分字型的大小和顏色

給TextView加上多彩效果:改變部分字型的大小和顏色

轉載請註明出處:http://blog.csdn.net/singwhatiwanna/article/details/18363899

前言

在實際使用中,有時候會遇到特殊需求,比如pm突發奇想,想把TextView的某幾個字變的大一點,再加點顏色,這貌似不好搞,如果是給TextView整體加效果就很好搞了。但是問題總是要解決,下面我給出解決方法,其實方法很簡單,問題在於你是否知道有這種方法。

方法:

1、 字型顏色可以採用font,也可以使用ColorSpan

2、 字型大小可以使用<big>、<small>和 <h1>到<h6>的標籤,還可以採用SizeSpan

3、 Spannable功能比較全面,呼叫setSpan即可為TextView設定美麗的特效,其支援的特效在CharacterStyle中定義,有好多種,比如AbsoluteSizeSpan、ForegroundColorSpan以及BackgroundColorSpan等,具體大家可以根據需要檢視,下面是CharacterStyle的類繼承關係圖:

public abstract class

CharacterStyle

extends Object

效果圖



上面效果的程式碼

        TextView textView1 = (TextView) findViewById(R.id.textView1);
        TextView textView2 = (TextView) findViewById(R.id.textView2);
        TextView textView3 = (TextView) findViewById(R.id.textView3);
        TextView textView4 = (TextView) findViewById(R.id.textView4);

        //兩次加大字型,設定字型為紅色(big會加大字號,font可以定義顏色)
        textView1.setText(Html.fromHtml("北京市釋出霾黃色預警,<font color='#ff0000'><big><big>外出攜帶好</big></big></font>口罩"));

        //設定字型大小為3級標題,設定字型為紅色
        textView2.setText(Html.fromHtml("北京市釋出霾黃色預警,<h3><font color='#ff0000'>外出攜帶好</font></h3>口罩"));

        //設定字型大小為58(單位為物理畫素),設定字型為紅色,字型背景為黃色
        textView3.setText("北京市釋出霾黃色預警,外出攜帶好口罩");
        Spannable span = new SpannableString(textView3.getText());
        span.setSpan(new AbsoluteSizeSpan(58), 11, 16, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        span.setSpan(new ForegroundColorSpan(Color.RED), 11, 16, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        span.setSpan(new BackgroundColorSpan(Color.YELLOW), 11, 16, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        textView3.setText(span);

        //兩次縮小字型,設定字型為紅色(small可以減小字號)
        textView4.setText(Html.fromHtml("北京市釋出霾黃色預警,<font color='#ff0000'><small><small>外出攜帶好</small></small></font>口罩"));

說明:上述程式碼分別用不同方式實現了類似的效果,通過對比,我們應該可以理解各種方法的不同,想寫出更多效果Spannable是必須的,因為font支援的屬性很有限,比如說font不支援size屬性,所以請多多瞭解Spannable。也許有時候我們想把文字加到xml裡面,這也是可以的,只不過有一點我們需要注意,那就是要對<、>、'、"這四個字元進行轉換,因為它們四個是HTML的標籤。具體來說,左括號<要用&lt;代替,右括號>要用&gt;代替,單引號和雙引號要用\進行轉義。這裡給出一個示例,其效果和上面程式碼中的效果是一致的:<string name="text">北京市釋出霾黃色預警,&lt;font color=\'#ff0000\'&gt;&lt;big&gt;&lt;big&gt;外出攜帶好&lt;/big&gt;&lt;/big&gt;&lt;/font&gt;口罩</string>,另外,你必須顯式地呼叫textView.setText(Html.fromHtml(getString(R.string.text)))來使其生效。