gpt4 book ai didi

android - 制作字体助手类

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:05:04 26 4
gpt4 key购买 nike

我的应用程序中有大约 10-15 个 ActivityFragment。我正在使用大约 5 种不同的字体(主要是 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");

并非所有类(class)都使用全部五个。一些使用 1,一些使用 4,一些使用 3,而其他人可能使用 3 的不同组合。

在每个类中声明这段代码似乎是多余的。这 5 种字体是否可以全部声明一次,也许是在应用程序启动时,然后我使用 Helper 类来静态使用它们?

我不确定是否必须在扩展应用程序的类中执行此操作——如果可能的话——还是在我可以静态调用的常规类中执行此操作?这将在哪里初始化?

最佳答案

I am not sure if I have to do this -- if possible at all -- in a class that extends Application, or just a regular Class that I can statically call?

两种方式都行。那里有几个示例实现,它们都“缓存”了最后创建的几个字体。如果我没记错的话,在最近的 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);
}
}
}

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

这是使用帮助程序类,但您也可以将其作为您自己的 Application 扩展的一部分。它懒惰地创建字体:它首先尝试从本地缓存中检索字体,只有在缓存中不可用时才实例化一个新字体。只需提供一个 Context 和要加载的字体名称。

关于android - 制作字体助手类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17283209/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com