【发布时间】:2016-08-29 06:51:50
【问题描述】:
我正在尝试在不同的Activities 中应用自定义字体,现在我在MainActivity 的onCreate() 中有以下代码:
String fontTitle = "fonts/OpenSans-Bold.ttf";
Typeface titleFont = Typeface.createFromAsset(getAssets(), fontTitle);
page_title.setTypeface(titleFont);
我想知道是否可以将Typeface 公开,以便我可以在其他活动中访问它。
我创建了一个名为FontHelper的类:
public class FontHelper extends MainActivity {
// path for the fonts
String fontTitle = "fonts/OpenSans-Bold.ttf";
Typeface titleFont = Typeface.createFromAsset(getAssets(), fontTitle);
}
但在其他Activities 中,当我使用textView.setTypeface(FontHelper.titleFont) 时出现错误。我该如何解决这个错误?
【问题讨论】:
-
在每个 Activity 中创建一个新的 Typeface 实例有什么问题?还是创建字体的静态工厂方法?您尝试做的事情在技术上是可行的,但只会造成内存泄漏 - 我希望您知道这是一件坏事。
-
@XaverKapeller 我想在不同的活动中使用字体,但我认为它是多余的,所以我决定创建一个辅助类。这如何造成内存泄漏?我刚刚在最后一个示例中阅读了this post,它有点像我想要的那样,这还会造成内存泄漏吗?
-
是的,不要盲目跟随互联网上的随机博客帖子。拥有一个帮助类并不是一件坏事,但是这篇文章中帮助类的实现是有问题的,因为它泄露了创建字体的上下文。解决这个简单的方法:不要有一个静态变量来保持对字体的引用。而是将上下文传递给辅助方法,以便为每个 Activity 创建一个新的 Typeface 实例。
-
查看我的回答了解更多信息。
标签: java android public-method