在實際使用中,有時候會遇到特殊需求,好比pm突發奇想,想把TextView的某幾個字變的大一點,再加點顏色,這貌似很差搞,若是是給TextView總體加效果就很好搞了。可是問題老是要解決,下面我給出解決方法,其實方法很簡單,問題在於你是否知道有這種方法。html
一、 字體顏色能夠採用font,也可使用ColorSpanjava
二、 字體大小可使用<big>、<small>和 <h1>到<h6>的標籤,還能夠採用SizeSpanandroid
三、 Spannable功能比較全面,調用setSpan便可爲TextView設置美麗的特效,其支持的特效在CharacterStyle中定義,有好多種,好比AbsoluteSizeSpan、ForegroundColorSpan以及BackgroundColorSpan等,具體你們能夠根據須要查看,下面是CharacterStyle的類繼承關係圖:api
java.lang.Object | |
↳ | android.text.style.CharacterStyle |
Known Direct Subclasses |
Known Indirect Subclasses |
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的標籤。具體來講,左括號<要用<代替,右括號>要用>代替,單引號和雙引號要用\進行轉義。這裏給出一個示例,其效果和上面代碼中的效果是一致的:<string name="text">北京市發佈霾黃色預警,<font color=\'#ff0000\'><big><big>外出攜帶好</big></big></font>口罩</string>,另外,你必須顯式地調用textView.setText(Html.fromHtml(getString(R.string.text)))來使其生效。字體