制作TypeFace助手类

The*_*ter 4 android class typeface

我的应用程序中大约有10-15个Activity或者Fragment是.我有大约5种不同的TypeFaces(主要是Roboto变体).

在几乎所有课程中我都必须这样做:

roboto_light = Typeface.createFromAsset(getActivity().getAssets(),
        "fonts/roboto_light.ttf");
roboto_thin = Typeface.createFromAsset(getActivity().getAssets(),
        "fonts/roboto_thin.ttf");
roboto_regular = Typeface.createFromAsset(getActivity().getAssets(),
        "fonts/roboto_regular.ttf"); 
Run Code Online (Sandbox Code Playgroud)

并非所有课程都使用全部五个.有些使用1,有些使用4,有些使用3,而其他可能使用3 的不同组合.

在每个类中声明此代码似乎是多余的.5种字体都可以声明一次,也许当应用程序启动时,然后我使用帮助程序类静态使用它们?

我不确定我是否必须这样做 - 如果可能的话 - 在扩展应用程序的类中,或者只是我可以静态调用的常规类?这将被初始化?

MH.*_*MH. 8

我不确定我是否必须这样做 - 如果可能的话 - 在扩展应用程序的类中,或者只是我可以静态调用的常规类?

无论哪种方式都可以.有几个示例实现,它们都"缓存"创建的最后几个类型面.如果我没记错的话,在最近的Android平台上,缓存也会发生.无论如何,基本实现看起来像这样:

public class Typefaces{

    private static final Hashtable<String, Typeface> cache = new Hashtable<String, Typeface>();

    public static Typeface get(Context c, String name){
        synchronized(cache){
            if(!cache.containsKey(name)){
                Typeface t = Typeface.createFromAsset(c.getAssets(), String.format("fonts/%s.ttf", name));
                cache.put(name, t);
            }
            return cache.get(name);
        }
    }    
}
Run Code Online (Sandbox Code Playgroud)

资料来源:https://code.google.com/p/android/issues/detail?id = 9994#c3

这是使用辅助类,但您也可以将它作为自己的Application扩展.它会懒惰地创建类型面:它首先尝试从本地缓存中检索类型面,并且如果缓存中不可用,则仅实例化一个新面.只需提供一个Context和要加载的类型面的名称.