2016年10月3日 星期一

如何讓Android 文字(TextView)使用自訂字型不卡頓 (轉)

Ref : https://ukyoappdev.blogspot.tw/2016/04/android-textview.html

如何讓Android 文字(TextView)使用自訂字型不卡頓

有時為了版面好看,或是想要表現出文青的氣息,會想要把App的字型做個統一的樣式呈現,取代掉Android系統內建的字型,於是就會有必須變更字型的需求。而實作的方式只要透過以下幾個步驟就可以完成:

1.先在assets資料夾建立fonts資料夾,並將字型檔複製到assets/fonts的目錄下

2.將文字設定為自訂的字型
private Typeface fontType;
private TextView text;

fontType = Typeface.createFromAsset(getActivity().getAssets(),"fonts/NotoSansCJKtc-Regular.otf");
text.setTypeface(fontType);


基本上到步驟2就已經完成文字使用自訂字型的功能了,但如果使用自訂字型的文字同時出現在ListView或是ViewPager,在滑動的時候就會發生卡頓的情形,所以建議繼續實作步驟3

3.新增靜態提供字型的class,保留產生的字型物件
public class TypeFaceProvider {

   private static Hashtable typeFaces = new Hashtable(3);

   public static Typeface getTypeFace(Context context, String fileName) {

       Typeface typeface = typeFaces.get(fileName);

       if (typeface == null) {

           String fontPath = "fonts/" + fileName;
           typeface = Typeface.createFromAsset(context.getAssets(), fontPath);

           typeFaces.put(fileName, typeface);
       }

       return typeface;
   }

}

然後將Typeface改為使用靜態提供字型的class所產生的物件
private Typeface fontType;
private TextView text;

fontType = TypeFaceProvider.getTypeFace(getActivity(), "NotoSansCJKtc-Regular.otf");
text.setTypeface(fontType);
如此一來就不會每次都一直產生字型的物件而造成卡頓的情形,而且還可以具有加入多組字型的彈性

沒有留言:

張貼留言