高效的自定义字体方式

时间:2012-09-17 14:48:55

标签: android memory fonts textview

  

可能重复:
  Android - Using Custom Font

在Android APPlication中自定义字体的最佳或最有效方法是什么?我一直在尝试自定义Textviews和Edittexts,但我的应用程序有点慢,因为我使用自定义字体并占用大量内存,有时甚至崩溃。

1 个答案:

答案 0 :(得分:4)

我严重怀疑应用程序的缓慢是因为您使用自定义字体。这可能是你应用它们的方式。通常,我会在我的活动中执行以下操作:

//Get an instance to the root of your layout (outermost XML tag in your layout
//document)
ViewGroup root = (ViewGroup)findViewById(R.id.my_root_viewgroup);

//Get one reference to your Typeface (placed in your assets folder)
Typeface font = Typeface.createFromAsset(getAssets(), "My-Font.ttf");

//Call setTypeface with this root and font
setTypeface(root, font);

public void setTypeface(ViewGroup root, Typeface font) {
    View v;

    //Cycle through all children
    for(int i = 0; i < root.getChildCount(); i++) {
        v = root.getChildAt(i);

        //If it's a TextView (or subclass, such as Button) set the font
        if(v instanceof TextView) {
            ((TextView)v).setTypeface(font);

        //If it's another ViewGroup, make a recursive call
        } else if(v instanceof ViewGroup) {
            setTypeface(v, font);
        }
    }
}

通过这种方式,您只能对字体保留一个引用,并且您不必对任何视图ID进行硬编码。

您也可以将其构建到Activity的自定义子类中,然后让所有Activites扩展您的自定义Activity而不是仅扩展Activity,那么您只需编写一次此代码。