如何讓Android 文字(TextView)使用自訂字型不卡頓
有時為了版面好看,或是想要表現出文青的氣息,會想要把App的字型做個統一的樣式呈現,取代掉Android系統內建的字型,於是就會有必須變更字型的需求。而實作的方式只要透過以下幾個步驟就可以完成:
1.先在assets資料夾建立fonts資料夾,並將字型檔複製到assets/fonts的目錄下
2.將文字設定為自訂的字型
基本上到步驟2就已經完成文字使用自訂字型的功能了,但如果使用自訂字型的文字同時出現在ListView或是ViewPager,在滑動的時候就會發生卡頓的情形,所以建議繼續實作步驟3
3.新增靜態提供字型的class,保留產生的字型物件
然後將Typeface改為使用靜態提供字型的class所產生的物件
Reference:
http://stackoverflow.com/questions/15338016/performance-issue-on-custom-font-textview
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 HashtabletypeFaces = 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);如此一來就不會每次都一直產生字型的物件而造成卡頓的情形,而且還可以具有加入多組字型的彈性
Reference:
http://stackoverflow.com/questions/15338016/performance-issue-on-custom-font-textview
謝謝 :)
回覆刪除cannot resolve method getActivity()
回覆刪除為什麼QQ
因為我是以Fragment做為範例,所以當getTypeFace要傳入Context當參數時,是以gatActivity()傳入。
刪除於是如果在Activity的話,就會出現cannot resolve method getActivity(),
將getActivity()改為使用this傳入即可。