Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android 自定義控件字體,解決字體偏移,卡頓,代碼重復等問題

android 自定義控件字體,解決字體偏移,卡頓,代碼重復等問題

編輯:關於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等 ,同理。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved