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种字体都可以声明一次,也许当应用程序启动时,然后我使用帮助程序类静态使用它们?
我不确定我是否必须这样做 - 如果可能的话 - 在扩展应用程序的类中,或者只是我可以静态调用的常规类?这将被初始化?
我不确定我是否必须这样做 - 如果可能的话 - 在扩展应用程序的类中,或者只是我可以静态调用的常规类?
无论哪种方式都可以.有几个示例实现,它们都"缓存"创建的最后几个类型面.如果我没记错的话,在最近的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和要加载的类型面的名称.