如何讓Android 文字(TextView)使用自訂字型不卡頓
有時為了版面好看,或是想要表現出文青的氣息,會想要把App的字型做個統一的樣式呈現,取代掉Android系統內建的字型,於是就會有必須變更字型的需求。而實作的方式只要透過以下幾個步驟就可以完成:
1.先在assets資料夾建立fonts資料夾,並將字型檔複製到assets/fonts的目錄下
2.將文字設定為自訂的字型
基本上到步驟2就已經完成文字使用自訂字型的功能了,但如果使用自訂字型的文字同時出現在ListView或是ViewPager,在滑動的時候就會發生卡頓的情形,所以建議繼續實作步驟3
3.新增靜態提供字型的class,保留產生的字型物件
然後將Typeface改為使用靜態提供字型的class所產生的物件
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);如此一來就不會每次都一直產生字型的物件而造成卡頓的情形,而且還可以具有加入多組字型的彈性
沒有留言:
張貼留言