如何實現 「中間這幾個字要加粗,可是不要太粗,比較纖細的那種粗」 ?

分享一個最近作業務遇到的簡單又蠻有意思的的文本顯示處理過程。具體就是有這麼一段文字,相似「轉盤抽獎得到跑車x1,點擊領取~」,用TextView顯示。java

設計師:「能讓文字加粗嗎?」

「能夠」,而後加上了粗體屬性android:textStyle="bold"。android

<TextView android:id="@+id/tv_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:textStyle="bold" android:textColor="#252525" android:textSize="19sp"/>複製代碼

不放截圖了,效果你知道的。ios

設計師:「不不不,不是總體加粗,只要中間這幾個字,就跑車x1加粗,其餘文字不變。哦😯,或者前面的加上下花線」

「OK」,由於變成了文字分段顯示成不一樣樣式了,因此我換用了span來處理。git

Spanny spanny = new Spanny("Underline text", new UnderlineSpan())
                .append("\nBold text", new StyleSpan(Typeface.BOLD))
                .append("\nPlain text");
textView.setText(spanny);複製代碼

這裏的Spanny是個很好用的Span工具類Spanny,能夠便捷地將span設置到String上,順便推薦一下。若是不用Spanny,效果本身按原生Api拼接也是同樣的。github

設計師:「爲何加粗會這麼粗,iOS沒有這麼粗啊,不要這麼粗,要纖細的那種粗!」

「@¥#%@@*&!微笑😊」
爲何會比iOS的粗,由於是系統字體不同的緣由,iOS 用的是Helvetica,安卓字體是Roboto,其字體自己就設計加粗效果就是這麼粗。就沒有辦法了嗎?有的。app

  1. 能夠換字體,好比light字體。可是不支持局部的加粗,總不能把文字切成3個textview來顯示吧,不實際。×
  2. span+畫筆處理。 √ ide

    //沒錯,就幾行代碼這麼簡單
    public class FakeBoldSpan extends CharacterStyle {
    
     @Override
     public void updateDrawState(TextPaint tp) {
         tp.setFakeBoldText(true);//一種僞粗體效果,比原字體加粗的效果弱一點
         // tp.setStyle(Paint.Style.FILL_AND_STROKE);
         // tp.setColor(Color.RED);//字體顏色
         // tp.setStrokeWidth(10);//控制字體加粗的程度
     }
    }
    //使用:
    fakeBoldText.setText(new Spanny().append("FakeBold",new FakeBoldSpan()));複製代碼

    如圖,依次是普通字體,加粗字體,比較纖細的那種粗——
    工具


2017.07.31 更新,有評論問到中文加粗怎麼搞?
設置一下Span的畫筆:字體

tp.setStyle(Paint.Style.FILL_AND_STROKE);
        tp.setColor(Color.RED);//字體顏色
        tp.setStrokeWidth(10);//控制字體加粗的程度複製代碼

這裏控制的是字體加粗的程度。有空再寫個方便隨意控制粗細度的方法吧。spa

相關文章
相關標籤/搜索