android 自訂控制項字型,解決字型位移,卡頓,代碼重複等問題
其實,安卓上使用自訂的字型非常得簡單,在assets檔案夾下面,自己定義一個font檔案夾,然後,把自己的字型放進去,可以重新命名一下,
這樣之後,在代碼中,設定一下就可以,如下面所示:
Typeface typeface = Typeface.createFromAsset(_instance.getAssets(), fonts/mi4.ttf);textView.setTypeface(typeface);
這樣,textView顯示的文字就是我們自訂的字型了。
但其實這樣還有一些問題,我一個一個說:
字型位移:剛開始,我們老大給我們找了一個xx.otf格式的字型,蘋果上使用沒有問題,安卓上,可以把尾碼名改一下,改成ttf,也可以使用,但發生的問題就是,字型是整體偏下的,使用原生的字型,可以正常顯示,但使用了這個字型,只能顯示上半拉,更關鍵的是,英文和中文 的位移量還不一樣,弄得我調了半天,最後發現,是字型的問題,必須使用原生的ttf字型,使用軟體把otf字型轉換成ttf也不行,照樣會偏。
解決辦法 : 使用原生的ttf字型
卡頓,代碼 重複:如你所知,使用上面的代碼 ,就可以給textView設定字型,但這樣,沒法設定全域字型,每一個控制項,都要這樣設定,我的應用程式有很多個介面 ,有很多控制項,我每個都這樣設定,結果,介面非常卡。還會溢出。
而且,這樣,也會有大量的代碼重複。
這兩個問題,我最後的解決辦法如下:
首先:自訂applicaion,現在,一般都是這樣自訂的application,然後,在程式如下:
public class MyApplication extends Application { private Typeface typeface; private static MyApplication _instance; @Override public void onCreate() { super.onCreate(); _instance = (MyApplication) getApplicationContext(); typeface = Typeface.createFromAsset(_instance.getAssets(), fonts/mi4.ttf); } public static MyApplication getInstace() { return _instance; } public Typeface getTypeface() { return typeface; } public void setTypeface(Typeface typeface) { this.typeface = typeface; }}
如下面的代碼所示,我直接聲明了一個typeFace,它有自己的getter,setter方法,同時,在程式初使化的時候,我就用下面的代碼,把typeface初使化了。
然後,使用自訂的View:
public class MyTextView extends TextView { public MyTextView(Context context) { super(context); setTypeface(MyApplication.getInstace().getTypeface()); } public MyTextView(Context context, AttributeSet attrs) { super(context, attrs); setTypeface(MyApplication.getInstace().getTypeface()); } public MyTextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); setTypeface(MyApplication.getInstace().getTypeface()); }}
,在自訂的view的構造方法中,直接使用了MyApplication中的typeFace來給view設定字型。
這樣,在所有的介面中,我們可以使用我們這個自訂的textView,我們測試並且軟體現在已經上線了,完全沒有問題。
其它的,如果editText,button等 ,同理。